SORU
29 Aralık 2008, PAZARTESİ


Çok büyük bir metin dosyası son 10 satır olsun&; gt 10 GB c#

Ne çok büyük bir metin dosyası son 10 satır (bu özel dosya 10 GB bitti) ekran için en etkili yoldur. Sadece basit bir c yazmayı düşünüyordum# app ama bu etkili nasıl emin değilim.

Teşekkürler!

CEVAP
29 Aralık 2008, PAZARTESİ


On yeni satır bulun ve sonra ileri uçta dikkate alarak çeşitli kodlamalar için okumak kadar dosyayı sonuna kadar oku, geri aln. Dosyadaki satır sayısı en az on durumlarda işlemek için emin olun. Aşağıda bir uygulama (C# olarak etiketlemiş bu), genelleştirilmiş bulmak için son numberOfTokens dosyasında yer alan path kodlu encoding token ayırıcı tarafından temsil edilir tokenSeparator; sonuç olarak döndürülür string (Bu olabilir tarafından geliştirilmiş dönen bir IEnumerable<string> o sıralar belirteçleri).

public static string ReadEndTokens(string path, Int64 numberOfTokens, Encoding encoding, string tokenSeparator) {

    int sizeOfChar = encoding.GetByteCount("\n");
    byte[] buffer = encoding.GetBytes(tokenSeparator);


    using (FileStream fs = new FileStream(path, FileMode.Open)) {
        Int64 tokenCount = 0;
        Int64 endPosition = fs.Length / sizeOfChar;

        for (Int64 position = sizeOfChar; position < endPosition; position  = sizeOfChar) {
            fs.Seek(-position, SeekOrigin.End);
            fs.Read(buffer, 0, buffer.Length);

            if (encoding.GetString(buffer) == tokenSeparator) {
                tokenCount  ;
                if (tokenCount == numberOfTokens) {
                    byte[] returnBuffer = new byte[fs.Length - fs.Position];
                    fs.Read(returnBuffer, 0, returnBuffer.Length);
                    return encoding.GetString(returnBuffer);
                }
            }
        }

        // handle case where number of tokens in file is less than numberOfTokens
        fs.Seek(0, SeekOrigin.Begin);
        buffer = new byte[fs.Length];
        fs.Read(buffer, 0, buffer.Length);
        return encoding.GetString(buffer);
    }
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AmazonWireless

    AmazonWirele

    8 EYLÜL 2010
  • Exalto_Gamer

    Exalto_Gamer

    15 EKİM 2014
  • Joe DiFeo

    Joe DiFeo

    7 AĞUSTOS 2012