问题描述
OpenFileDialog ofg = new OpenFileDialog
{
FileName = "BaseFileName*",Filter = "CSV File (*.CSV)|*.csv",Multiselect = false,InitialDirectory = @"N:\Downloads"
};
但是,该进程在文件名中添加了 _Processed 后缀和时间戳数据,我想在下次使用 OpenFileDialog 时排除这些重命名的文件,以防止用户尝试重新处理同一文件。
出于内部审计的原因,我必须将原始文件留在原处。
所以我需要一个不等于“_Processed”的附加文件名过滤器。
有没有办法用 OpenFileDialog 做到这一点,或者有人知道可以做到这一点的自定义 c#/.net 组件吗?
解决方法
您要求从文件对话框视图中省略特定项目。
根据 MSDN,这在 Windows 7 中不再可能,但以前是可能的。
C# 文件对话框(WPF 和 WinForms)使用 IFileDialog
API。
这是本可以完成这项工作但不再受支持的功能:
事实上,在用户选择文件并点击 OK 确认后,您不得不检查文件的正确性。
您可以对这种情况有所帮助:如果您喜欢痛苦,那么您可以从 .NET 源代码中复制整个 IFileDialog
COM 互操作代码,并实现 IFileDialogEvents
。这样,当用户单击“确定”时,您可以拒绝选择并在对话框关闭之前显示错误,让对话框保持打开状态,以便用户可以选择不同的文件。
如果您心智健全并且不想这样做,那么您必须在验证失败后再次打开对话框。
,简单的方法就是使用另一个扩展名保存处理过的数据,例如“BaseFileName_Processed_20105640640.cvs1”,这样您就可以保留数据并且您的文件对话框不会显示此文件。
另一种方法是在 if 语句中调用 OpenFileDialog()(并将返回值与 DialogResult.OK 进行比较),然后将文件名拆分为 {'_','.'},然后运行一个循环来计数单词 Processed(>0) 的出现,并且可能作为安全检查来确定时间戳是否存在于拆分字符串之一中。最后,在选择错误的文件时重新加载在同一个文件夹中的文件率。