Отфильтровать временные файлы из списка C # Directory.GetFiles - PullRequest
1 голос
/ 14 октября 2011

Я пытаюсь хранить только файлы с расширениями .SLDPRT, .SLDASM и .SLDDRW. Однако я продолжаю получать скрытые временные файлы, начинающиеся с ~ $, например, C: \ directory \ ~ $ IamAteilitaryfile.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 ]

1 голос
/ 14 октября 2011

Вы можете добавить другое, где игнорировать файлы, начинающиеся с ~ $

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 голосов
/ 14 октября 2011

Или вы можете упростить свою логику с помощью 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 условных выражений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...