我正在尝试仅保留文件扩展名为.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();
答案 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
条件更容易。