当我运行下面的代码时,它会在我的数组中填充指定目录中的文件列表.
这很好.
但是,它还会抓取"正在运行"的文件 - 这意味着当前正在复制到该目录的文件.
这是不好的.
如何忽略那些"飞行中"文件?有没有办法在处理之前检查每个文件以确保它"完全存在"?
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();
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有办法实现你想要的.罗伯特关于打开文件写作的建议解决了问题的一个子集,但没有解决更大的问题
最好将文件系统视为您没有同步功能的多线程对象
无论您尝试使用什么同步构造将文件系统置于"已知状态",用户都有一种方法可以击败它.
解决此问题的最佳方法是正常处理文件并捕获使用"正在运行"的文件导致的异常.这是处理文件系统的唯一理智方式.