Так что мне нужно l oop через набор указанных c папок в нашей сети для поиска файлов и создания новой папки с найденными файлами. Таким образом, у нас есть папка, в которую мы ежедневно / еженедельно копируем файлы для обработки определенным отделом. Папки начинаются как ГОД, затем ДАТА, а затем все файлы на эту дату
Example:
c:\backup\2018
c:\backup\2018\06-06-2018\
c:\backup\2019
c:\backup\2019\09-20-2019\
c:\backup\2020
c:\backup\2020\02-20-2020\
Так что мое приложение, которое я создаю, получает МАКСИМАЛЬНУЮ дату / год из папки предыдущего года, а затем создает новая папка со всем БОЛЬШЕ чем в этом году
Так что, если я go в мою папку c: \ backup \, в этом примере будет 2018, 2019, 2020, в течение каждого года будет папка для каждого файлы дня были заархивированы.
Теперь, если мое приложение определит, что МАКСИМАЛЬНАЯ дата с момента нашей последней обработки была 8/6/2019, мне нужно l oop ТОЛЬКО для папок 2019 и 2020 годов, найти любую папку даты, которая больше 6/8/2019, и скопируйте каждый файл в пределах каждой даты в соответствующую новую папку.
Моя первая попытка состояла в том, чтобы l oop через папку резервных копий для папки года, которая является такой же, но моя путаница заключается в том, как мне эффективно l oop через все папки 2019 и перейти к папке 2020 , так как это больше, чем 6/8/2019. Как только я попал в 2019, их обработка была быстрой, но как кодировать эту логику c, чтобы она могла перейти в папку 2020 root и продолжить обработку?
Прикрепленное изображение структура папок, поэтому она немного более понятна
Вот текущий код, который, кажется, работает, но кое-как как в бесконечном l oop :( BrgDirs - это каталоги root (2019 и 2020). FldF содержит максимальную дату для каждого типа файла, который он ищет. SdD содержит все имена папок даты (08-07-2019, et c ..)
foreach (DirectoryInfo b in brgDirs)
{
int bd = Convert.ToInt32(b.Name);
DateTime bdt = new DateTime(bd, 1, 1);
foreach(Wave w in fldF)
{
int wd = Convert.ToInt32(w.MYEAR);
DateTime wdt = new DateTime(wd, 1, 1);
if (wdt >= bdt)
{
DirectoryInfo[] sdD = b.GetDirectories();
foreach (DirectoryInfo sd in sdD)
{
DateTime pWDate = DateTime.Parse(w.MDATE);
DateTime pSDate = DateTime.Parse(sd.Name);
if(pSDate.Date > pWDate.Date)
{
ProcessEachFolder(sd.FullName);
}
}
}
}
}
И я обрабатываю Обработка каждого файла этим методом
private void ProcessEachFolder(string fpath)
{
string[] fileEntries = Directory.GetFiles(fpath); // WAVE SUBFOLDER FOLDER PATH
waveDirectory = @"C:\backup\Test\" + currentWave;
foreach (string d in fileEntries)
{
string fileNAME = Path.GetFileName(d);
if (d.Contains("CLEARANCE_MOD"))
{
File.Copy(d, waveDirectory + @"\CLR\" + fileNAME, true);
}
if (d.Contains("DEALS_MOD"))
{
File.Copy(d, waveDirectory + @"\HD\" + fileNAME, true);
}
if (d.Contains("DROP_MOD"))
{
File.Copy(d, waveDirectory + @"\PD\" + fileNAME, true);
}
if (d.Contains("LABELS_MOD"))
{
File.Copy(d, waveDirectory + @"\UPL\" + fileNAME, true);
}
}
}
После первого запуска и просмотра файлов, заполненных в правильных папках, я остановил приложение, но затем я снова запустил его без точек останова и позволил ему работать, и он продолжал работать и работать .. и он никогда больше не попадает в foreach (DirectoryInfo b в brgDirs), он снова и снова обрабатывает одни и те же папки и файлы и не будет переходить к следующему папка, которая является папкой 2020 года.
List<Wave> fldF = new List<Wave>();
private class Wave
{
public string FLD { get; set; }
public string MDATE { get; set; }
public string MYEAR { get; set; }
}
Значения в пределах fldF в настоящее время похожи на
FLD = CL, MDATE = 08-06-2019, MYEAR = 2019
FLD = HD, MDATE = 08-06-2019, MYEAR = 2019
FLD = PD, MDATE = 08-01-2019, MYEAR = 2019
FLD = UP, MDATE = 08-06-2019, MYEAR = 2019