Scenario: 150 MB di file di testo che è la Posta in arrivo esportata di un vecchio account di posta elettronica. È necessario analizzare ed estrarre le email da un utente specifico e scriverle in un nuovo file singolo. Ho un codice che funziona, è solo ostinato.Ottimizza file C# IO
Sto utilizzando le stringhe di indicatore per cercare da dove iniziare/terminare la copia dal file originale.
Ecco la funzione principale:
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();
La funzione che scrive i messaggi selezionati per il nuovo file:
public void writeLog(string sMessage)
{
fw = new System.IO.StreamWriter(path, true);
fw.WriteLine(sMessage);
fw.Flush();
fw.Close();
}
Ancora una volta, questo processo funziona. Ottengo un buon file di output, ci vuole solo molto tempo e sono sicuro che ci sono modi per renderlo più veloce.
BTW - È possibile prendere in considerazione l'istruzione using anziché Close() manualmente: è più sicuro se si verifica un'eccezione. Il mio esempio dimostra ... –
'while (! Sr.EndOfStream)' è ridondante con 'while ((mystring = sr.ReadLine())! = Null)' –