SORU
10 AĞUSTOS 2010, Salı


Nasıl kilitlemeden bir metin dosyası okuyabilir miyim?

Hizmet basit bir biçimde bir metin dosyası günlüğü yazar bir windows var.

Şimdi, hizmetin günlüğünü okumak için küçük bir uygulama oluşturmak için gidiyorum ve Canlı Görünüm olarak hem mevcut günlük ve katma gösteriyor.

Sorun servis metin yeni hatlar ve aynı zamanda Görüntüleyicisi uygulama okuma için bir dosyayı kilitler eklemek için dosya kilitleri.

Hizmet Kodu:

void WriteInLog(string logFilePath, data)
{
    File.AppendAllText(logFilePath, 
                       string.Format("{0} : {1}\r\n", DateTime.Now, data));
}

Görüntüleyici Kodu:

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();
            }
        }

Okuma ve yazma benim kodunda herhangi bir sorun var mı?

Bu sorun nasıl çözülür?

CEVAP
10 AĞUSTOS 2010, Salı


Hizmeti ve okuyucu hem günlük dosyası olmayan sadece açık olduğundan emin olun. Bunu deneyin:

Hizmete her şeyi yapma yetkisine bir örneği aşağıdaki gibi oluşturulur

var outStream = new FileStream(logfileName, FileMode.Open, 
                               FileAccess.Write, FileShare.ReadWrite);

Okuyucu aynı ama dosya erişim değiştirmek için:

var inStream = new FileStream(logfileName, FileMode.Open, 
                              FileAccess.Read, FileShare.ReadWrite);

İyi şanslar!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ciaran Blumenfeld

    Ciaran Blume

    20 NİSAN 2009
  • jagadambarecords

    jagadambarec

    13 AĞUSTOS 2008
  • metagamers

    metagamers

    13 Mayıs 2006