该进程无法访问该文件,因为它正由另一个进程使用

本文关键字:进程 另一个 访问 文件 因为 | 更新日期: 2023-09-27 17:57:01

当我从蝙蝠文件启动我的 .net 控制台应用程序时,例如 start myapp.exe

myapp.exe然后尝试将文件写入其当前目录,尽管我收到一个 .net 运行时错误,声称该文件正被另一个应用程序使用(没有其他运行)

https://i.stack.imgur.com/XLmnR.png

尽管当我在没有批处理文件的情况下正常启动它时,例如双击它,它运行良好并输出文件正常。我认为这可能与特权有关,尽管尝试以管理员身份运行批处理文件,但我收到相同的错误"文件正在使用中..."

谁能对此有所了解?

法典:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace FileSearcher
{
class Program
{    
    static void Main(string[] args)
    {
        string dirPath = "C:''";
        FileSystemWatcher fileWatcher = new FileSystemWatcher(dirPath); 
        fileWatcher.IncludeSubdirectories = true;  
        fileWatcher.Filter = "*.exe";    
        // fileWatcher.Filter = "C:''$Recycle.Bin";   
        //  fileWatcher.Changed += new FileSystemEventHandler(FileWatcher_Changed);   
        fileWatcher.Created += new FileSystemEventHandler(FileWatcher_Created);    
        //  fileWatcher.Deleted += new FileSystemEventHandler(FileWatcher_Deleted);  
        //  fileWatcher.Renamed += new RenamedEventHandler(FileWatcher_Renamed);    
        fileWatcher.EnableRaisingEvents = true;      
        // updated code

        Console.ReadKey(); 
    }

        static void FileWatcher_Renamed(object sender, RenamedEventArgs e)
        {
            Console.WriteLine(e.OldName + " was renamed to " + e.Name);
        }
        static void FileWatcher_Deleted(object sender, FileSystemEventArgs e)
        {
            Console.WriteLine(e.Name + " was deleted");
        }
        static void FileWatcher_Created(object sender, FileSystemEventArgs e)
        {
            using (StreamWriter fileWriter = new StreamWriter("process.lst", true))
            {
                var data = true;
                fileWriter.Write("C:''" + e.Name + Environment.NewLine);
            }

        }
        static void FileWatcher_Changed(object sender, FileSystemEventArgs e)
        {
            Console.WriteLine(e.Name + "");
        }
    }
}

该进程无法访问该文件,因为它正由另一个进程使用

从批处理文件中看,您要将 stdout (1>) 发送到您在应用程序中写入的同一文件 (process.lst)。 您可以执行其中之一,但不能同时执行这两项操作。

例如,此应用程序在自行运行时工作正常:

static void Main(string[] args)
{
    StreamWriter writer = File.CreateText("process.lst");
    Console.WriteLine("Writing to the file.");
    writer.Write("Testing 1.2.3.4");
    Console.WriteLine("Finished.");
}

但是,当像myTestApp.exe 1> process.lst这样的命令行运行时,会产生与您相同的异常:

The process cannot access the file 'process.lst' because it is being used by another process.

尝试在 OnCreated 事件完成后执行您的过程。也许启动一个短计时器并在计时器滴答作响时写入文件(请记住停止计时器)

创建文件的事件会立即触发,即使文件尚未写入也是如此。您应该始终尝试打开文件并在获得 IOException 时稍等片刻。您可以在此处找到解决方案:http://bloggingabout.net/blogs/jschreuder/archive/2006/07/06/12886.aspx