Фильтрация имен файлов: получение *.abc без *.abcd или *.abcde, и так далее

Нет возможности использовать dotnet для сборки в Visual Studio для Mac. Он использует msbuild. Если вы действительно хотите это сделать, вам нужно обойти встроенную поддержку и использование msbuild, предоставляемые VS Mac.

VS Mac использует msbuild, который поставляется с Mono, потому что он поддерживает больше целевых сред (например, Xamarin.iOS, Xamarin.Android), чем MSBuild .NET Core SDK. Обратите внимание, что VS в Windows использует аналогичный подход, когда для запуска сборок он использует настольный MSBuild и не использует сборку dotnet.

Однако MSBuild от Mono по-прежнему использует различные целевые файлы MSBuild SDK, которые поставляются с .NET Core SDK. Существует средство преобразования MSBuild SDK, поставляемое с Mono, которое позволяет находить и использовать цели .NET Core SDK msbuild.

Также обратите внимание, что MSBuild от Mono включает в себя некоторые части .NET Core SDK, поэтому он может компилировать проекты .NET Standard без использования .NET Core SDK.

8
задан Micha Wiedenmann 18 December 2015 в 11:08
поделиться

5 ответов

Ответ - то, что необходимо сделать фильтрацию сообщения. Один только GetFiles не может сделать этого. Вот пример, который отправит, обрабатывают Ваши результаты. С этим можно использовать шаблон поиска с GetFiles или не - он будет работать так или иначе.

List<string> fileNames = new List<string>();
// populate all filenames here with a Directory.GetFiles or whatever

string srcDir = "from"; // set this
string destDir = "to"; // set this too

// this filters the names in the list to just those that end with ".doc"
foreach (var f in fileNames.All(f => f.ToLower().EndsWith(".doc")))
{
    try
    {
        File.Copy(Path.Combine(srcDir, f), Path.Combine(destDir, f));
    }
    catch { ... }
}
9
ответ дан 5 December 2019 в 12:13
поделиться

Не ошибка, извращенное но хорошо зарегистрированное поведение. *.doc соответствует *.docx на основе 8,3 поисков нейтрализации.

Необходимо будет вручную постотфильтровать результаты для окончания в документе.

5
ответ дан 5 December 2019 в 12:13
поделиться

используйте linq....

    string strSomePath = "c:\\SomeFolder";
string strSomePattern = "*.abc";
string[] filez = Directory.GetFiles(strSomePath, strSomePattern);

var filtrd = from f in filez
         where f.EndsWith( strSomePattern )
         select f;

foreach (string strSomeFileName in filtrd)
{
    Console.WriteLine( strSomeFileName );
}
0
ответ дан 5 December 2019 в 12:13
поделиться

Это не поможет в ближайшей перспективе, но голосующий по сообщению MS Connect для этой проблемы могли изменить вещи в будущем.

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=95415

0
ответ дан 5 December 2019 в 12:13
поделиться

С тех пор для "*.abc" GetFiles возвратит расширения 3 или больше, что-либо с длиной 3 после "." точного совпадения, и что-либо дольше не.

string[] fileList = Directory.GetFiles(path, "*.abc");

foreach (string file in fileList)
{
   FileInfo fInfo = new FileInfo(file);

   if (fInfo.Extension.Length == 4) // "." is counted in the length
   {
      // exact extension match - process the file...
   }
}

Не уверенный в производительности вышеупомянутого - в то время как это использует простые сравнения длины, а не обработки строк, новый FileInfo () называют каждый раз вокруг цикла.

0
ответ дан 5 December 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: