Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 进程无法访问该文件,因为其他进程正在使用该文件。(线程)_C#_.net_File Io - Fatal编程技术网

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

C# 进程无法访问该文件,因为其他进程正在使用该文件。(线程),c#,.net,file-io,C#,.net,File Io,我使用单独的线程将调试信息写入文件。在启动期间,我喜欢备份以前的任何文件。不幸的是,操作系统似乎挂在文件句柄上的时间不确定,所以当我尝试写入文件时,它失败了 我正在Windows XP上使用C#,.Net framework 3.5。(Vista和Win7有相同的问题) 下面是提取问题的代码,其中t将抛出System.IO.IOException:“进程无法访问文件'C:\deleteMe.txt',因为它正被另一个进程使用。” 谢谢 初始化信号量时出错。Try:新信号量(0,1) 看 Wait

我使用单独的线程将调试信息写入文件。在启动期间,我喜欢备份以前的任何文件。不幸的是,操作系统似乎挂在文件句柄上的时间不确定,所以当我尝试写入文件时,它失败了

我正在Windows XP上使用C#,.Net framework 3.5。(Vista和Win7有相同的问题)

下面是提取问题的代码,其中
t
将抛出System.IO.IOException:“进程无法访问文件'C:\deleteMe.txt',因为它正被另一个进程使用。”


谢谢

初始化信号量时出错。Try:
新信号量(0,1)

WaitEvent可能更容易、更适合于此任务

这两项代码更改是:

//Semaphore readyToWrite=new Semaphore(1, 1);
var readyToWrite = new ManualResetEvent(false);

//readyToWrite.Release();
readyToWrite.Set();

此外,设置优先级通常是个坏主意。在这里你不会得到任何东西(这是一个I/O线程),所以最好不要使用它。

+1,是的。启动一个线程,然后等待它也是一种资源浪费。将优先级设置得更高并不能买到更快的硬盘。@Hans:同意优先级,我再补充一点。剩下的我认为这是一个摘录,所以我不确定这是否是一个糟糕的设计。谢谢,我想这很简单。我提取的代码有一个bug,figures。当你写入文件时,你是否正确地关闭或处理了它?@Steven:这都在提供的代码中。答案是肯定的。@Henk:原来可以向下滚动!:-)好的,在使用
之前声明
w
有点奇怪,但是应该是无害的,调用
Flush
也是无害的。据我所知,没有理由不立即提供该文件。也许还有其他的过程,比如防病毒扫描程序。@Steven:再向下滚动一点,找到我的答案。问题已经解决了。实际的拷贝序列也有点奇怪。
存在
是多余的,我不知道为什么它会
复制
删除
,而不仅仅是
移动
。不过,这些都不能解释文件被锁定的原因。
//Semaphore readyToWrite=new Semaphore(1, 1);
var readyToWrite = new ManualResetEvent(false);

//readyToWrite.Release();
readyToWrite.Set();