当我运行下面的代码时,它会用指定目录中的文件列表填充我的数组。
这很好。
但是,它还会抓取“正在运行”的文件 - 即当前正在复制到该目录的文件。
这很糟糕。
如何忽略那些“正在运行”的文件?有没有办法在我处理每个文件之前检查它以确保它“完全存在”?
string[] files = Directory.GetFiles(ConfigurationSettings.AppSettings.Get("sourcePath"));
if (files.Length > 0)
{
foreach (string filename in files)
{
string filenameonly = Path.GetFileName(filename);
AMPFileEntity afe = new AMPFileEntity(filenameonly);
afe.processFile();
}
}
最佳答案
不幸的是,没有办法实现您正在寻找的东西。罗伯特关于打开文件进行写入的建议解决了问题的一个子集,但没有解决更大的问题
The file system is best viewed as a multi-threaded object over which you have no synchronization capabilities
无论您尝试使用什么同步构造将文件系统置于“已知状态”,用户都有办法击败它。
解决此问题的最佳方法是正常处理文件并捕获因使用“正在运行”的文件而导致的异常。这是处理文件系统的唯一明智的方法。
关于c# - 忽略正在运行的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1875857/