Sigmond Gatt Ответов: 1

Как получить несколько имен файлов с помощью directory.getfiles.


Привет ребята :

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

Это мой код. :


string[] inputFilePaths = Directory.GetFiles("//path to directory", "*.txt.2018-" + DateTime.Now.ToString("MM") + "-*");


           using (StreamWriter outputStream = new StreamWriter("path to output file" + DateTime.Now.ToString("MM-yyyy") + "-Statistics.txt",false))
           {
               foreach (var inputFilePath in inputFilePaths)
               {
                   using (var inputStream = new StreamReader(inputFilePath))
                   {
                      outputStream.Write(inputStream.ReadToEnd());
                   }

               }
           }


В каталоге у меня есть следующие файлы :

TodayLog.txt х
TodayLog.тхт.2018-08-08 х
TodayLog.тхт.2018-08-09 х
TodayLog.тхт.2018-08-10 х
TodayLog.txt.2018-07-29


Мне нужны только файлы, обозначенные буквой "x". Как я могу это сделать, пожалуйста?

Что я уже пробовал:

var file = Directory.GetFiles("//path to directory").Where(s => s.Equals("TodayLog.txt") || s.Contains(".txt.2018 - " + DateTime.Now.ToString("MM") + "-"));


Я попробовал этот метод, но он ничего не возвращает, и мне нужно вернуть его в виде строки[].

Кто-нибудь может мне помочь, пожалуйста?

F-ES Sitecore

Ваш файл называется

TodayLog.txt.2018-08-08

Используйте отладчик, чтобы посмотреть, к чему приводит следующее

".тхт.2018 - " + Датавремя.Сейчас.Метод toString("мм") + "-"

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

Sigmond Gatt

главная проблема заключается в том, что мне нужно получить TodayLog.txt и это тоже. Я уже получаю пути к этим файлам, которые заканчиваются датой

1 Ответов

Рейтинг:
9

OriginalGriff

Напишите метод для обработки пути:

private bool IsThisMonth(DateTime now, string path)
    {
    DateTime dt;
    if (!DateTime.TryParseExact(Path.GetExtension(path),
                                ".yyyy-MM-dd",
                                CultureInfo.InvariantCulture,
                                DateTimeStyles.None,
                                out dt))
        {
        return false;
        }
    return dt.Year == now.Year && dt.Month == now.Month;
    }
Тогда это тривиально:
DateTime now = DateTime.Now;
string[] thisMonth = inputFilePaths.Where(f => IsThisMonth(now, f)).ToArray();


Sigmond Gatt

извините , но вы меня немного смутили, насколько я понимаю, я не получаю файл TodayLog.txt но с этим методом правильно ?

OriginalGriff

Изменить
возвращать false;
к
вернуть true;
и он вернется в этом месяце, и все, что не заканчивается датой.

Sigmond Gatt

я отлаживаю его и изменил возврат на true но метод все еще не возвращается todaylog.txt с другими текстовыми файлами за этот месяц

OriginalGriff

Есть ли он в первоначальном списке?

Sigmond Gatt

да он находится в том же каталоге

OriginalGriff

Это не то, о чем я спрашивал.
- Это есть в первоначальном списке?"

Sigmond Gatt

если исходный список означает список , который вы получаете, то нет :/
извините я не понимаю смысла оригинального списка

OriginalGriff

Я имею в виду: "это в массиве, с которого вы начинаете: inputFilePaths?"
Вы проверяли?
Потому что если его нет там до того, как вы попытаетесь его найти, то уж точно не будет потом...

Sigmond Gatt

О , это уже фильтровалось, теперь все в порядке, спасибо :)

OriginalGriff

Всегда пожалуйста!