2011-10-14 73 views
1

我試圖只保留文件擴展名爲.SLDPRT,.SLDASM和.SLDDRW的文件。但是,我一直收到隱藏的以〜$開頭的臨時文件,如C:\ directory \〜$ IamAtemporaryfile.sldprt。你有什麼建議擺脫這些?從Directory.GetFiles列表中篩選出臨時文件C#

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(); 

回答

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(); 
+0

This is close。但是,GetFiles將返回完整路徑。所以Where(str =>!str.Contains(@「\〜$」)更好。 –

+0

同意,固定... – Steven

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條件容易得多。