Member 12708425 Ответов: 2

Код C# для проверки того, существует ли файл с именем с апертикулярным шаблоном внутри каталога или нет?


Я требую, чтобы a проверял, существует ли файл с именем с определенным шаблоном внутри каталога или нет с помощью кода C#.
Скажем, мой каталог
c:\myfiles\files1
. В этом каталоге есть несколько файлов excel, названных по следующему шаблону.
myfile_17052017
myfile1_18052017.xlsx
myfile1_20052017.xlsx
myfile1_21052017.xlsx
myfile1_22052017.xlsx
myfile1_23052017.xlsx
myfile1_24052017.xlsx


и

C:\myfiles\files2


<pre>myfile_17052017
myfile2_18052017.xlsx
myfile2_19052017.xlsx
myfile2_20052017.xlsx
myfile2_21052017.xlsx
myfile2_22052017.xlsx
myfile2_24052017.xlsx


и
так далее..........

Эти файлы генерируются каким-то другим приложением в
c:\myfiles\files1,c:\myfiles\files2,c:\myfiles\files3 and so on. . .
каталог.
Здесь вы можете заметить, что файл даты
19052017
отсутствует внутри
c:\myfiles\files1\
каталог и файл
23052017
отсутствует внутри
c:\myfiles\files2\
каталог.Мне нужно проверить, какие файлы отсутствуют, и сохранить имена отсутствующих файлов с соответствующим именем каталога в файле .txt в шаблоне файла, показанном выше.
У меня есть несколько каталогов,таких как files1 ,files2.files3, files4 и т. д.
c:\myfiles\
каталог, указанный выше.

Поэтому мне нужно провести эту проверку по всем подкаталогам внутри
c:\myfiles\
каталог.

Могу ли я привести какой-нибудь пример C# для этого требования?

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

Я начинающий в C# и мне нужен какой-то пример cod eby, с помощью которого я могу достичь этой цели.

[no name]

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

2 Ответов

Рейтинг:
0

Maciej Los

Если я вас хорошо понимаю, вы хотите найти недостающие файлы (даты) в папках.

Здесь решение с помощью LINQ :

//define initial folder and extension
string initialdir = @"C:\myfiles";
string fileExt = "*.xlsx";
//needed to extract date from file name
System.Globalization.CultureInfo cu = System.Globalization.CultureInfo.InvariantCulture;

//get files and missing dates
var filesAndDates = Directory.EnumerateFiles(initialdir, fileExt, SearchOption.AllDirectories)
    //group files by directory name
    .GroupBy(x => Path.GetDirectoryName(x))
    //select files and corresponding dates from file name
    .Select(grp => new
        {
            folder = grp.Key,
            files = grp.Select(f=>Path.GetFileNameWithoutExtension(f)).ToList(),
            dates = grp.Select(f=>DateTime.ParseExact(Path.GetFileNameWithoutExtension(f).Replace("myfile_", ""), "ddMMyyyy", cu)).ToList(),
        })
    //find missing dates in folders
    .SelectMany(x =>
        //create date range between min and max in current folder - get all dates
        //exclude dates which already exist
        Enumerable.Range(0, (int)(x.dates.Max() - x.dates.Min()).TotalDays + 1)
            .Select(i => x.dates.Min().AddDays(i))
            .Except(x.dates)
            .Select(y=> new
                {
                    folder = x.folder,
                    missingDate = y
                })
        );

foreach(var fd in filesAndDates)
{
    Console.WriteLine("{0}\t|\t{1}", fd.folder, fd.missingDate.ToString("yyyy-MM-dd", cu));
}

Результат:
C:\myfiles\files1  |  2017-05-19
C:\myfiles\files2  |  2017-05-23


Если вы хотите знать, как это работает, пожалуйста, прочтите мои комментарии в приведенном выше коде.


Member 14110226

Привет... у меня есть одно сомнение.. Как включить имя файла также В вывод?

Maciej Los

Если у вас есть какие-либо вопросы, пожалуйста, используйте виджет "задать вопрос".