1

我正在监视新文件的文件夹,当新文件出现时,我读取(并保存在 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,告诉我该文件已被另一个进程使用。如果我在文件夹中剪切/粘贴,一切正常。此外,如果我将文件从另一台机器复制(但在这种情况下也剪切)/粘贴到受监视的文件夹中,也会发生锁定问题。

你知道发生了什么吗?

有没有更安全的方法来访问文件以避免这种类型的锁定?

谢谢!

4

1 回答 1

0

这是我做的一个小片段,以确保文件已完成复制或未被另一个进程使用。

 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

}
于 2013-10-16T15:23:13.880 回答