c# - 忽略正在运行的文件

标签 c#

当我运行下面的代码时,它会用指定目录中的文件列表填充我的数组。

这很好。

但是,它还会抓取“正在运行”的文件 - 即当前正在复制到该目录的文件。

这很糟糕。

如何忽略那些“正在运行”的文件?有没有办法在我处理每个文件之前检查它以确保它“完全存在”?

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/

相关文章:

c# - "Parameter is not valid"System.Drawing.Image.FromStream() 方法异常

c# - C#中的Excel互操作中的HRESULT代码

c# - Google Chrome 的 ASP.NET MVC Session.IsNewSession 问题

c# - 向数组添加元素

c# - 更多 XML 问题 - 未声明的实体 'nbsp'

c# - 如何过滤 xml 部分并将其保存为文件

c# - 集合<T>RemoveAt 与RemoveItem

c# - 是否有一种标准模式可以避免由于单个任务阻塞而导致作业队列延迟?

c# - ASP.NET Core - 当前上下文中不存在名称 'JsonRequestBehavior'

c# - 带有 Microsoft Edge 驱动程序的 Selenium 从未完成初始化