c# - 测试文件是否完整且未被其他进程/(外部)程序/线程/锁定
问题描述
情况:文件被转储到一个文件夹中。这个文件夹一直在用自己的逻辑进行监控。当文件在文件夹中时,它们会被自动处理。我们只想处理完全复制到目录中的文件。如果我们将一个大文件(例如 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 曾经说过的那样,测试这一点的唯一方法是尝试打开这个文件。
此代码有效,但“旧”。
是否有更有效的方法/技术来实施和测试?(因为性能至关重要,所以越快越好)。
解决方案
推荐阅读
- android - 如何在 Android 中通过 Glide 显示背景模糊的图像?
- javascript - 如何使用Angularjs按顺序输出不同元素的数组
- javascript - 如何在不改变数组的情况下更新此状态?
- java - 比较两个音频文件的重音、节奏和语调
- c# - 析构函数会影响性能吗?
- apache-kafka - 使用固定/静态代理列表运行 kafka 生产者
- python - Pandas 中是否有类似 Spark SQL 的粗略等价物?
- python - Postgresql 存储过程未从脚本运行
- javascript - setTimeout js 和语音通道 discordjs
- bash - 如何使用 bash 输出给定输入的命令链结果