StreamReader blocca un file di testo mentre lo sta leggendo.
Posso forzare lo StreamReader a funzionare in modalità "sola lettura" o "non bloccante"?È possibile impedire a StreamReader di bloccare un file di testo mentre è in uso?
La mia soluzione sarebbe quella di copiare il file in una posizione temporanea e leggerlo da lì, ma preferirei utilizzare lo StreamReader direttamente se possibile. Qualche suggerimento alternativo?
Sfondo:
Ho scritto una piccola app per ottenere alcune statistiche da un file di registro. Questo file viene costantemente aggiornato (più volte al secondo) da un programma esterno che consente di chiamare AAXXYY.
La revisione dell'output suggerisce che la mia app potrebbe bloccare il file e impedire la scrittura di AAXXYY.
Questo è quello che sto facendo
private void btnGetStats_Click(object sender, EventArgs e)
{
int countStarts = 0;
int countEnds = 0;
IList<string> sessions = new List<string>();
using(StreamReader stRead = new StreamReader(openFileDialog1.FileName,Encoding.Unicode))
{
while(!stRead.EndOfStream)
{
string line = stRead.ReadLine();
if(line.Contains("Session start"))
{
countStarts++;
sessions.Add(line.Substring(line.IndexOf("["), line.LastIndexOf("]") - line.IndexOf("[")));
}
if (line.Contains("Session end"))
{
countEnds++;
sessions.Remove(line.Substring(line.IndexOf("["), line.LastIndexOf("]") - line.IndexOf("[")));
}
}
}
txtStarts.Text = countStarts.ToString();
txtEnds.Text = countEnds.ToString();
txtDifference.Text = (countStarts - countEnds).ToString();
listBox1.DataSource = sessions;
}
+1 questo funziona bene. Grazie. Anche se ho dovuto sostituire "var" con FileStream e StreamReader. Cosa doveva fare Var? È quel VB? Penso che questa risposta dovrebbe essere modificata per cambiare quelli, ma non ho il rappresentante per farlo da solo –
Informazioni sulla parola chiave 'var', vedere questo link: http://msdn.microsoft.com/en-us/library/bb383973 aspx. Quella parola chiave è nuova in C# 3.0+. – pyrocumulus
Aha. Grazie al cloud. Mi fa bene per lavorare nei periodi bui. Peccato non posso fare +1 su un commento :-) –