Selamun Aleyküm, C#'da log dosyasi okumayi yaptim fakat icine satir eklenince yalnizca eklenen satirlari cekmeyi cözemedim, önerilerinizi veya kod örneklerinizi bekliyorum,

FileSystemwracther kullandim olmadi, Readline.count kullandim gene olmadi, GetLastWriteTime kullandin gene olmadi,

örnekle aciklayacak olan biri olursa sevinirim..

soruldu: 20 Şub '14, 18:46

kzorluoglu's gravatar image

kzorluoglu
1256914
cevap kabul oranı: 19%

değiştirildi: 20 Şub '14, 19:10

Soruyu çok genel sormuşsun, cevap alabilmek için sorunu mümkün olduğunca dar bir çerçeveye sokmalısın.

Örneğin ben cevap vermek istiyorum ama soru o kadar geniş ve veriler o kadar eksik ki, neresinden başlasam bilemiyorum ve cevap vermekten vazgeçiyorum.

Bu durumu açıklamak için bir örnek verelim. Mesela log dosyası diyorsun, bu nasıl bir dosya bir metin (text) dosyasımı, daha farklı bir formatta bir xml veya bir json dosyası mı? Bunları bilmeden bir cevap vermeye çalışmak hiç kolay değil. (tatmin edici bir cevaptan bahsediyorum tabi ki, yoksa sallama bir cevap elbette verilebilir.)

(21 Şub '14, 01:57) zafer zafer's gravatar image

Sorunumu cözdüm, Belki ihtiyac olan arkadaslar olabilir paylasiyorum, Problemin kaynagi; Log Dosyasini yazan Program bu Log dosyasini hep acik tutuyor, Bu yüzdende Dosyayi her saniye kopyalamaktan baska cözüm bulamamistim,

Cözüm;

Projemize

  1. dosyakontrol adinda bir timer
  2. Chatlogyolu adinda bir textbox
  3. listView2 adinda bir listview

ekleyin, ve asagidaki kodu log cekeceginiz forma koyun,

private void dosyakontrol_Tick(object sender, EventArgs e) {

   File.Copy(Chatlogyolu.Text, Environment.CurrentDirectory + @"\\Chatlog.txt", true);
    string fileName = Environment.CurrentDirectory + @"\\Chatlog.txt";
    var lines = File.ReadLines(fileName);
    foreach (string line in lines.Skip(Sonsayi))
    {
        Sonsayi++;
        string[] split = line.Split(", ".ToCharArray());
        listView2.Items.Add(split[4].ToString() + " Mesaji : " + split[6].ToString());
        var items = listView2.Items;
        var last = items[items.Count - 1];
        last.EnsureVisible();
    }
}

bu kodla, Herhangi bir yazi dosyasini programinizda Listview alanina anlik olarak Gecmisi silmeden basabilirsiniz,

permanent link

cevaplandı: 04 Kas '14, 06:39

kzorluoglu's gravatar image

kzorluoglu
1256914
cevap kabul oranı: 19%

Merhaba jolyjokerz,

Öncelikle performans konusunda tahminden ziyade tecrübe ve yaptğın gerçek hayat testlerine göre bir değerlendirme yaparsan bu seni çok daha doğru noktalara ulaştırır.

Mesajında bahsettiğin Log Monitör örneği temelde FileSystemWatcher sınıfının nimetlerinden faydalanıyor. Konu ile ilgili Türkçe kaynak (http://www.csharpnedir.com/articles/read/?id=368) ve İngilizce kaynak (http://msdn.microsoft.com/tr-tr/library/system.io.filesystemwatcher%28v=vs.110%29.aspx) adreslerini paylaştım. Bu konuda çok bilgiye sahip değilim ama kabaca baktığımda senin istediğini yapabilecek gibi duruyor. Bundan sonrası sana kalmış.

Son olarak yazdığım küçük bir örneği paylaşmak isterim. MCY rumuzlu arkadaşın yazdıklarından sonra kabaca böyle bir deneme yapmak istedim. Sende incelemek istersin diye burada paylaşıyorum. Vakit bulup elindeki 1000 satırlık log dosyası ile test yaparsan sevinirim. Açıklamalar kod içinde mevcuttur. (Visual Studio 2010 - Console Project)

using System;
using System.IO;

namespace LogOkuTest
{
    class Program
    {
        private static long sonPozisyon = 0;

        static void Main(string[] args)
        {
            // Sonsuz döngü, sadece test için 
            while (true)
            {
                // Dosyamızdan ilk okumayı yapalım ve sonucu ekrana yollayalım.
                string log = LogDosyasiniOku();
                Console.WriteLine("Okunan log bilgisi : \\n=================================\\n" + log);

                // Log dosyasına kayıt girmek için işlemi bekletelim.
                // Bu arada log dosyasına yeni satırlar girerek, log kaydı işlemini simüle edelim.
                // Giriş işlemi bitince entera basalım ve ekranı inceleyelim.
                Console.ReadLine();
            }
        }

        static string LogDosyasiniOku()
        {
            using (StreamReader dosyaOkuyucu = new StreamReader("log.txt"))
            {
                // sonPozisyon degeri sıfırdan büyükse dosya üzerinde daha önce okuma yaptık demektir.
                if (sonPozisyon > 0)
                {
                    // Bu sebeple dosya göstergemizi önceki okumada kaldığımız pozisyona getiriyoruz
                    dosyaOkuyucu.BaseStream.Position = sonPozisyon;

                    // Tampon bellegi temizleyelim, en olur ne olmaz;)
                    dosyaOkuyucu.DiscardBufferedData();
                }

                // Dosyamızdan veriyi okulyalım
                string veri = dosyaOkuyucu.ReadToEnd();

                // Son kaldığımız yeri daha sonra kullanmak için bir tarafa yazalım.
                sonPozisyon = dosyaOkuyucu.BaseStream.Position;

                return veri;
            }
        }
    }
}
permanent link

cevaplandı: 21 Şub '14, 11:14

zafer's gravatar image

zafer
41591019
cevap kabul oranı: 11%

değiştirildi: 21 Şub '14, 11:15

Log dosyam s Sekilde

Log.221.2.2014 icerigi

Ahmet: Böyl dedi
Mehet : böyle deidi
H+seyin: Böyle dedi
Ahmet: Böyl dedi
Mehet : böyle deidi
H+seyin: Böyle dedi

Diyemlimki buraya kadarken Log dosyasi actim programi, buraya kadarini gösteriyor listede,

Ahmet: Böyl dedi
Mehet : böyle deidi
H+seyin: Böyle dedi
Ahmet: Böyl dedi
Mehet : böyle deidi
H+seyin: Böyle dedi

YENI BIR SEY OLDUGUNDA LOG DOSYASI DEVAMLI DEGISIYOR, ASAGIDAKILER PROGRAM ACILDIKTAN SONRA EKLENMIS KABUL EDELIM.. Mehmete Cevap Verdi: Bla Bla Dedi AHet : Söyle yapti Mehmet : Söyle yapti

program acildiktan sonra eklenen satirlarida ekrana List'e bastirmak istiyorum olay bu..

Log okumak icin kullandigim fonksiyon;

        using (StreamReader sr = File.OpenText(fileName))
        {
            string s = "";
            while ((s = sr.ReadLine()) != null)
            {
            }
}
permanent link

cevaplandı: 21 Şub '14, 03:44

kzorluoglu's gravatar image

kzorluoglu
1256914
cevap kabul oranı: 19%

değiştirildi: 21 Şub '14, 04:09

Aslına bakarsan sanalism rumuzlu arkadaşın çözümlerini kullanarak bu sorunu aşabilirsin.

Dosya yapısına bakınca, aslında sen kişilerin yazışmalarını saklamak için kendi veri yapını oluşturmuşsun gibi görünüyor. Eğan öylese burada öğrenmemiz gereken bir bilgi daha var. Bu dosya yapısı üzerinde değişiklik yapma hakkına sahip misin?

Eğer öyleyse sanalism rumuzlu arkadaşın ilk cevabındaki tarih-saat bilgisi üzerinden bir ayrım yapmak bence en doğru çözüm olur.

(21 Şub '14, 07:33) zafer zafer's gravatar image

yazilan diger cozumlerin hiçbirisi performansli degil. Hele de buyuk boyutlu dosyalarda. Dosyayi file pointer ile okumalisin. Son kaldigin noktayi bilip ona gore yenileme aninda kaldigin pointerdan devam ederek byte by byte okumalisin. Javada randomAccessFile var, C# icin karsiligini arastirabilirsin.

Kolay gelsin

permanent link

cevaplandı: 21 Şub '14, 08:05

MCY's gravatar image

MCY
1.1k2622
cevap kabul oranı: 16%

değiştirildi: 21 Şub '14, 08:05

FileSystemWacthher ile yapildigi söylenen bir örnek var, fakat örnekten nasil okudugunu cözemedim bir türlü, http://www.codeproject.com/KB/files/LogMonitor/LogMonitorSource.zip

http://www.codeproject.com/Articles/19062/Log-Monitor

Yardimlarinizi bekliyorum... Dedigim gibi dosyanin icinde 1000'e yakin satir var file replace ile, performans iyi olmayacaktir tahminimce.

permanent link

cevaplandı: 21 Şub '14, 08:18

kzorluoglu's gravatar image

kzorluoglu
1256914
cevap kabul oranı: 19%

-1

üstadim öncelikle paylasimin icin tesekkür ederim. fakat sizin göndermis oldugun kod parcaciginda tüm yazilari tek bir metin olarak algiliyor, Readline komutu seklinde bir bölme yapamiyorum, o yüzden bu gönderdiginiiz kod parcacagi tam isimi görmüyor

permanent link

cevaplandı: 21 Şub '14, 11:53

kzorluoglu's gravatar image

kzorluoglu
1256914
cevap kabul oranı: 19%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×9
×4

Soruldu: 20 Şub '14, 18:46

Görüntüleme: 2,078 kez

Son güncelleme: 04 Kas '14, 06:39

powered by BitNami OSQA