Это займет некоторое время, чтобы объяснить, но потерпите меня.
Я автоматизирую создание записей о проектах и лидах в нашей базе данных, основываясь на существовании подкаталогов по определенному пути. Структура каталогов состоит из трех уровней. Я указываю, что код на верхнем уровне возвращает подкаталоги (регионы) в массив объектов DirectoryInfo, например:
DirectoryInfo[] classARegions = dir.GetDirectories("*", SearchOption.TopDirectoryOnly);
Каталоги, с которыми я хочу работать, являются подпрограммами этого уровня региона, поэтому я перебираю массив DirectoryInfo с помощью:
foreach (DirectoryInfo region in classARegions)
Затем я перебираю каталоги объектов DirectoryInfo региона таким же образом:
DirectoryInfo[] prospects = region.GetDirectories("*", SearchOption.TopDirectoryOnly);
До этого момента все в порядке. Проблема, с которой я сталкиваюсь, заключается в том, что после того, как я закончу обработку подкаталогов первого региона и вернусь через цикл ForEach, я обнаружил, что мой массив перспективы не был повторно инициализирован как пустой. Вместо этого теперь он включает в себя все подкаталоги из предыдущей итерации в дополнение к подкаталогам для текущей итерации.
Мой вопрос сводится к тому, что я делаю это неправильно или есть способ очистить массив перспективы , чтобы он заполнялся только подкаталогами из области этой итерации?
* Весь метод размещен ниже.
public string UpdateProspectInfo()
{
int countAdded = 0;
int countExisting = 0;
int countAddedOverall = 0;
int countExistingOverall = 0;
StringBuilder summary = new StringBuilder();
StringBuilder existing = new StringBuilder();
StringBuilder added = new StringBuilder();
string prospectDir = ConfigurationManager.AppSettings["ProspectDir"].ToString();
// get list of folders in Class A
DirectoryInfo dir = new DirectoryInfo(prospectDir);
DirectoryInfo[] classARegions = dir.GetDirectories("*", SearchOption.TopDirectoryOnly);
summary.Append("Found " + classARegions.Length + " Class A Regions.\r\n");
foreach (DirectoryInfo region in classARegions)
{
string regionName = (region.Name.Length > 50 ? region.Name.Substring(0, 50) : region.Name);
DirectoryInfo[] prospects = region.GetDirectories("*", SearchOption.TopDirectoryOnly);
summary.Append("\r\n Region: " + regionName + " contains " + prospects.Length + " prospect folders.\r\n");
foreach (DirectoryInfo prospect in prospects)
{
string projNum;
string projName;
int seperator = prospect.Name.IndexOf("-");
// go to next prospect if name doesn't contain a - character
if (seperator == -1)
continue;
projNum = prospect.Name.Substring(0, seperator);
projName = prospect.Name.Substring(seperator + 1);
ProjectCollection temp = new Select().From<Project>()
.Where("ProjectName").IsEqualTo(projName)
.ExecuteAsCollection<ProjectCollection>();
if (temp.Count < 1)
{
Project tempProj = new Project();
tempProj.ProjectNumber = projNum;
tempProj.ProjectName = projName;
tempProj.PMAssigned = "Joe Smith";
tempProj.PMUserID = 108;
tempProj.ProjectActivity = "Active";
tempProj.ProjectLead = "Lead";
//tempProj.Location = projNum.Substring(0,50);
tempProj.DirectoryPath = prospect.FullName;
tempProj.Save();
countAdded++;
added.Append(" " + projName + "\r\n");
}
else
{
((Project)temp[0]).DirectoryPath = prospect.FullName;
((Project)temp[0]).Save();
countExisting++;
}
}
// add summary for each region
summary.Append(" Added " + countAdded + " prospects.\r\n");
summary.Append(added.ToString());
summary.Append(" Processed " + countExisting + " prospects that already existed in the database.\r\n");
// update counts and continue to next region
countAddedOverall += countAdded;
countExistingOverall += countExisting;
countAdded = 0;
countExisting = 0;
}
return summary.ToString();
}