C# 进程无法访问该文件,因为其他进程正在使用该文件

C# 进程无法访问该文件,因为其他进程正在使用该文件,c#,.net,windows,C#,.net,Windows,当我从bat文件启动.net控制台应用程序时,例如start myapp.exe 然后,myapp.exe尝试将文件写入其当前目录,尽管我收到一个.net运行时错误,声称该文件正被另一个应用程序使用(没有其他程序在运行) 虽然当我在没有批处理文件(例如双击)的情况下正常启动它时,它可以正常工作并输出文件。我认为这可能与权限有关,尽管我尝试以管理员身份运行批处理文件,但我得到了相同的错误“文件正在使用…” 有人能解释一下吗 代码: 尝试在OnCreated事件完成后执行流程。可能启动一个短计时器

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

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

虽然当我在没有批处理文件(例如双击)的情况下正常启动它时,它可以正常工作并输出文件。我认为这可能与权限有关,尽管我尝试以管理员身份运行批处理文件,但我得到了相同的错误“文件正在使用…”

有人能解释一下吗

代码:


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

从批处理文件看,您正在将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
会产生与您相同的异常:


进程无法访问文件'process.lst',因为它正被另一个进程使用。

创建文件的事件会立即触发,即使该文件尚未写入。当出现IOException时,您应该始终尝试打开文件并稍等片刻。您可以在此处找到解决方案:

发布写入文件的代码。您是否尝试使用来确定其他进程正在使用该文件?啊,谢谢,所以我应该取出所有控制台。Writeline引用?不,保留它们。只是不要在批处理文件中重定向标准输出。啊,我明白你的意思,虽然我没有重定向sdout输入,但我只是启动文件,例如启动程序。EXE你的图像显示应用程序的执行是e:\。。。1> process.lst。需要删除的是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.");
}