CSharp - 只有在复制/粘贴时才锁定文件,如果剪切/粘贴,则不锁定

  显示原文与译文双语对照的内容

我正在监视新文件的文件夹,当新文件存在时,我将读取( 并保存在txt中) 文件:


FileStream file = File.Open(this.filePath, FileMode.Open, FileAccess.Read);
StreamReader reader = new System.IO.StreamReader(file);
string text = reader.ReadToEnd();
reader.Close();

如果在文件夹中复制/粘贴源文件,我会收到一个 IOExcpetion,告诉我该文件被另一个进程使用。 如果我在文件夹中剪切/粘贴,所有工作。 另外,如果我将( 但是在这种情况下)/粘贴文件从其他机器复制到受监视的文件夹中,也会发生锁定问题。

你有什么想法?

为了避免这种类型的锁,有一种更安全的访问文件的方法?

谢谢!

时间: 原作者:

下面是我要确保文件完成复制或者其他进程不使用的小 Fragment 。


 private bool FileUploadCompleted(string filename)
 {
 try
 {
 using (FileStream inputStream = File.Open(filename, FileMode.Open,
 FileAccess.Read,
 FileShare.None))
 {
 return true;
 }
 }
 catch (IOException)
 {
 return false;
 }
 }

然后你可以在流程逻辑之前实现这个


while (!FileUploadCompleted(filePath))
{
//if the file is in use it will enter here
//So you could sleep the thread here for a second or something to allow it some time
//Also you could add a retry count and if it goes past the allotted retries you
//can break the loop and send an email or log the file for manual processing or
//something like that

}

...