首页 > 解决方案 > 测试文件是否完整且未被其他进程/(外部)程序/线程/锁定

问题描述

情况:文件被转储到一个文件夹中。这个文件夹一直在用自己的逻辑进行监控。当文件在文件夹中时,它们会被自动处理。我们只想处理完全复制到目录中的文件。如果我们将一个大文件(例如 100MB)复制到一个文件夹中,我们不想处理该文件,直到它被完全复制(“完成”)。

目前我们使用以下代码对此进行测试:

FileStream fs = null;

try {
 fs = fileInfo.Open(FileMode.Open, FileAccess.Read, FileShare.Read);

// file is 'complete'
} catch (System.Security.SecurityException) {
   // file is locked, don't do stuff (maybe Windows Explorer is still copying).
}
catch {}
finally {
fs?.Close();
}

正如我认为 SO 用户 Hans Passant 曾经说过的那样,测试这一点的唯一方法是尝试打开这个文件。

此代码有效,但“旧”。

是否有更有效的方法/技术来实施和测试?(因为性能至关重要,所以越快越好)。

标签: c#.net

解决方案


推荐阅读