Сценарий - текстовый файл в 150 Мбайт, который является экспортированной папкой "Входящие" старой учетной записи электронной почты. Вам нужно разобрать и вытащить электронные письма от конкретного пользователя и записать их в новый отдельный файл. У меня есть код, который работает, его просто преследуют медленно.
Я использую строки маркеров для поиска, где начинать/заканчивать копию из исходного файла.
Здесь основная функция:
StreamReader sr = new StreamReader("c:\\Thunderbird_Inbox.txt");
string working = string.Empty;
string mystring = string.Empty;
while (!sr.EndOfStream)
{
while ((mystring = sr.ReadLine()) != null)
{
if (mystring == strBeginMarker)
{
writeLog(mystring);
//read the next line
working = sr.ReadLine();
while( !(working.StartsWith(strEndMarker)))
{
writeLog(working);
working = sr.ReadLine();
}
}
}
}
this.Text = "DONE!!";
sr.Close();
Функция, которая записывает выбранные сообщения в новый файл:
public void writeLog(string sMessage)
{
fw = new System.IO.StreamWriter(path, true);
fw.WriteLine(sMessage);
fw.Flush();
fw.Close();
}
Опять же, этот процесс работает. Я получаю хороший выходной файл, это занимает много времени, и я уверен, что есть способы сделать это быстрее.