从Directory.GetFiles列表C#中筛选出临时文件

时间:2011-10-14 02:16:07

标签: c#-4.0

我正在尝试仅保留文件扩展名为.SLDPRT,.SLDASM和.SLDDRW的文件。但是,我不断获取以〜$开头的隐藏临时文件,如C:\ directory \〜$ IamAtemporaryfile.sldprt。你有什么建议去除那些?

string[] solidworksFileList = Directory.GetFiles(args[0], "*.SLD???", 
SearchOption.AllDirectories).Where(str => str.EndsWith(".SLDPRT", 
StringComparison.OrdinalIgnoreCase) || str.EndsWith(".SLDASM", 
StringComparison.OrdinalIgnoreCase) || str.EndsWith(".SLDDRW", 
StringComparison.OrdinalIgnoreCase)).ToArray();

2 个答案:

答案 0 :(得分:1)

您可以添加另一个忽略以〜$

开头的文件的位置
string[] solidworksFileList = Directory.GetFiles(args[0], "*.SLD???", 
SearchOption.AllDirectories)
.Where(str => str.EndsWith(".SLDPRT", 
StringComparison.OrdinalIgnoreCase) || str.EndsWith(".SLDASM", 
StringComparison.OrdinalIgnoreCase) || str.EndsWith(".SLDDRW", 
StringComparison.OrdinalIgnoreCase))
.Where(str => !str.Contains(@"\~$")
.ToArray();

答案 1 :(得分:0)

或者您可以使用HashSet

简化逻辑
readonly HashSet<string> AllowedExtensions = new HashSet<string>(
    { ".SLDPRT", ".SLDASM", ".SLDDRW" },
    StringComparer.OrdinalIgnoreCase);

并在获取文件的方法中:

string[] solidworksFileList = Directory.GetFiles(args[0], "*.SLD???",
    SearchOption.AllDirectories)
    .Where(str => AllowedExtensions.Contains(Path.GetExtension(str)) &&
                  !Path.GetFileName(str).StartsWith("~$"))
    .ToArray();

这将是一个更通用的解决方案,因为您可以向HashSet添加任意数量的扩展,并且查找仍然接近恒定时间。而且比输入任意数量的str.EndsWith条件更容易。