网络上有一个文件夹,其中定期创建文件。需要将这些文件复制到另一个目录。您需要检查文件是否可用于复制,即 他不订阅吗?是否可以检查文件是否可写?例如,我通过Adobe Reader打开一个文件,这个文件应该不会被复制。我需要一个问题的答案,而不是“我如何知道一个文件是否被另一个程序打开进行修改?”
网络上有一个文件夹,其中定期创建文件。需要将这些文件复制到另一个目录。您需要检查文件是否可用于复制,即 他不订阅吗?是否可以检查文件是否可写?例如,我通过Adobe Reader打开一个文件,这个文件应该不会被复制。我需要一个问题的答案,而不是“我如何知道一个文件是否被另一个程序打开进行修改?”
在我看来,了解一个文件是否被另一个进程占用的最清醒的方法是尝试复制它并
System.IO.IOException在 I/O 错误的情况下获取它,如果没有访问它就会发生这种情况。尝试实现一种检查文件是否被锁定的方法不会给出特殊结果。由于没有人保证在调用锁检查方法和复制文件之间的间隔内,没有其他进程已经拿走了它。为此,您可以使用具有奇怪名称的库 Restart Manager。获取已占用文件的进程列表的示例 ( https://code.msdn.microsoft.com/windowsapps/How-to-know-the-process-704839f4 ):
适用于从 Windows Vista 开始的操作系统。
这是完成的项目。 一切都通过位于的系统openfiles.exe完成
c:\Windows\System32它支持许多操作,例如关闭文件、查询等。
如果你想获得另一个文件夹中文件的高质量副本,那么你需要更改算法。您可能会在复制过程中丢失数据,您可以(理论上)在打开该文件的进程的同时请求文件的状态,如果该进程是本地进程,它将锁定您认为空闲的文件。
在这个任务中正确的做法是简单地尝试一次复制所有内容,并在复制完成后检查结果。例如,按文件长度或复制前后修改文件的时间。未通过检查的文件被再次复制。好吧,更进一步 - 分析和处理出现的错误。