Сценарий - текстовый файл размером 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();
}
Опять же, этот процесс работает. Я получаю хороший выходной файл, это занимает много времени, и я уверен, что есть способы сделать это быстрее.