Ho un servizio Windows scrive il suo registro in un file di testo in un formato semplice.Come posso leggere un file di testo senza bloccarlo?
Ora, ho intenzione di creare una piccola applicazione per leggere il registro del servizio e mostra sia il registro esistente che quello aggiunto come visualizzazione live.
Il problema è che il servizio blocca il file di testo per l'aggiunta delle nuove righe e allo stesso tempo l'applicazione di visualizzazione blocca il file per la lettura.
il codice di servizio:
void WriteInLog(string logFilePath, data)
{
File.AppendAllText(logFilePath,
string.Format("{0} : {1}\r\n", DateTime.Now, data));
}
Il Codice spettatore:
int index = 0;
private void Form1_Load(object sender, EventArgs e)
{
try
{
using (StreamReader sr = new StreamReader(logFilePath))
{
while (sr.Peek() >= 0) // reading the old data
{
AddLineToGrid(sr.ReadLine());
index++;
}
sr.Close();
}
timer1.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void timer1_Tick(object sender, EventArgs e)
{
using (StreamReader sr = new StreamReader(logFilePath))
{
// skipping the old data, it has read in the Form1_Load event handler
for (int i = 0; i < index ; i++)
sr.ReadLine();
while (sr.Peek() >= 0) // reading the live data if exists
{
string str = sr.ReadLine();
if (str != null)
{
AddLineToGrid(str);
index++;
}
}
sr.Close();
}
}
C'è qualche problema nel mio codice in lettura e scrittura modo?
Come risolvere il problema?
Possibile duplicato di [È possibile impedire a StreamReader di bloccare un file di testo mentre è in uso?] (Https://stackoverflow.com/questions/1606349/can-i-prevent-a-streamreader-from-locking -a-text-file-while-it-is-in-use) –