如何测试文件是否在.NET中完全复制文件、测试、NET

2023-09-04 00:52:04 作者:眉间万般柔情

我监视的文件夹为新文件,并需要对它们进行处理。问题是,有时文件打开失败,因为系统还没有完成复制它。

I am monitoring a folder for new files and need to process them. The problem is that occasionally file opening fails, because system has not finished copying it.

什么是如果该文件已完成复制到测试的正确方法?

What is the correct way to test if the file is finished copying?

澄清: 我没有写权限的文件夹/文件和无法控制的复制过程(它的用户)。

Clarification: I don't have write permissions to the folder/files and cannot control the copying process (it's the user).

推荐答案

我觉得唯一可靠的办法做,这是试图以独占方式打开该文件并捕获特定的异常。我平时讨厌使用正常的应用程序逻辑的例外,但恐怕对于这种情况有没有其他的方法(至少我还没有找到一个尚未):

I think the only sure way to do this is by trying to open the file exclusively and catching a specific exception. I usually hate using exceptions for normal application logic, but I'm afraid for this scenario there's no other way (at least I haven't found one yet):

public bool FileIsDone(string path)
{
  try
  {
    using (File.Open(path, FileMode.Open, FileAccess.Read, FileShare.None))
    {
    }
  }
  catch(UnauthorizedAccessException)
  {
    return false;
  }

  return true;
}