2010-11-24 14 views
6

मेरे पास एक तृतीय पक्ष प्रोग्राम से लॉग फ़ाइल उत्पन्न होने पर हर बार उस टेक्स्ट फ़ाइल के अंत में एक सफेद स्पेस लाइन के साथ .txt के विस्तार के साथ एक साधारण लॉग टेक्स्ट फ़ाइल है।टेक्स्ट फ़ाइल में अंतिम पंक्ति को कैसे हटाएं?

इसलिए क्या कोई तरीका या कोड है जिसका उपयोग मैं टेक्स्ट फ़ाइल की अंतिम पंक्ति को हटाने के लिए कर सकता हूं?

लॉग पाठ फ़ाइल का एक उदाहरण:

Sun Jul 22 2001 02:37:46,73882,...b,r/rrwxrwxrwx,0,0,516-128-3,C:/WINDOWS/Help/digiras.chm 
Sun Jul 22 2001 02:44:18,10483,...b,r/rrwxrwxrwx,0,0,480-128-3,C:/WINDOWS/Help/cyycoins.chm 
Sun Jul 22 2001 02:45:32,10743,...b,r/rrwxrwxrwx,0,0,482-128-3,C:/WINDOWS/Help/cyzcoins.chm 
Sun Jul 22 2001 04:26:14,174020,...b,r/rrwxrwxrwx,0,0,798-128-3,C:/WINDOWS/system32/spool/drivers/color/kodak_dc.icm 
+2

में पाया यहाँ एक नज़र: http://stackoverflow.com/questions/532217/efficient-way-to-delete-a-line-from-a- पाठ-फ़ाइल, अंतिम पंक्ति को हटाने से किसी भी ओ को हटाने की तरह होना चाहिए थर्म लाइन –

उत्तर

18

कैसे की तरह कुछ के बारे में:

var lines = System.IO.File.ReadAllLines("..."); 
System.IO.File.WriteAllLines("...", lines.Take(lines.Length - 1).ToArray()); 

स्पष्टीकरण:

तकनीकी तौर पर, यदि आप एक फ़ाइल से एक लाइन को न हटाएं। आप एक फ़ाइल की सामग्री पढ़ते हैं और उन्हें हटाए गए सामग्री को छोड़कर उन्हें वापस लिखते हैं।

यह कोड क्या करता है सभी पंक्तियों को एक सरणी में पढ़ा जाता है, और इन पंक्तियों को केवल अंतिम पंक्ति को छोड़कर फ़ाइल में लिखते हैं। (टेक() विधि (LINQ का हिस्सा) निर्दिष्ट लाइनों की संख्या लेता है जो हमारे मामले में लंबाई है - 1)। यहां, var lines को String[] lines के रूप में पढ़ा जा सकता है।

public static void DeleteLastLine(string filepath) 
{ 
    List<string> lines = File.ReadAllLines(filepath).ToList(); 

    File.WriteAllLines(filepath, lines.GetRange(0, lines.Count - 1).ToArray()); 

} 

संपादित करें::

+0

दोस्त क्या आप कृपया मेरे लिए कोड समझा सकते हैं? धन्यवाद – JavaNoob

+0

स्पष्टीकरण जोड़ा गया। – decyclone

+0

फ़ाइल। रीडऑललाइन छोटी फाइलों के लिए ठीक है, लेकिन क्या आप वास्तव में इसका उपयोग करना चाहेंगे यदि फ़ाइल में दस लाख लाइनें हों? –

10

उपयोग इस विधि फ़ाइल की अंतिम पंक्ति को दूर करने के एहसास लाइनों चर पहले से मौजूद नहीं था, इसलिए मैं कोड अपडेट किया गया।

+0

सही उत्तर के लिए भी प्रतिनिधि जोड़ें! – JavaNoob

1

आप सभी स्मृति में लोड करने के बिना एक फ़ाइल से पिछले एन लाइनों को हटाना चाहते हैं:

int numLastLinesToIgnore = 10; 
string line = null; 
Queue<string> deferredLines = new Queue<string>(); 
using (TextReader inputReader = new StreamReader(inputStream)) 
using (TextWriter outputReader = new StreamWriter(outputStream)) 
{ 
    while ((line = inputReader.ReadLine()) != null) 
    { 
     if (deferredLines.Count() == numLastLinesToIgnore) 
     { 
      outputReader.WriteLine(deferredLines.Dequeue()); 
     } 

     deferredLines.Enqueue(line); 
    } 
    // At this point, lines still in Queue get lost and won't be written 
} 

क्या होता है कि आप आयाम numLastLinesToIgnore के साथ एक पंक्ति में प्रत्येक नई लाइन बफ़र और यह एक से पॉप है कतार पूर्ण होने पर ही लिखने के लिए लाइन। आप वास्तव में पढ़ते हैं फ़ाइल और आप फ़ाइल के अंत से पहले numLastLinesToIgnore लाइनों तक पहुंचने में सक्षम हैं, अग्रिम में में लाइनों की कुल संख्या जानने के बिना।

ध्यान दें कि यदि पाठ numLastLinesToIgnore से कम है, तो परिणाम खाली है। Delete specific line from a text file?

1

आप लाइन अंत नहीं हटा सकते हैं, के रूप में File.WriteAllLines स्वचालित रूप से जोड़ लेता है, फिर भी, आप इस विधि का उपयोग कर सकते हैं::

मैं इस के लिए एक दर्पण समाधान के रूप में के साथ आया था

public static void WriteAllLinesBetter(string path, params string[] lines) 
{ 
    if (path == null) 
     throw new ArgumentNullException("path"); 
    if (lines == null) 
     throw new ArgumentNullException("lines"); 

    using (var stream = File.OpenWrite(path)) 
    using (StreamWriter writer = new StreamWriter(stream)) 
    { 
     if (lines.Length > 0) 
     { 
      for (int i = 0; i < lines.Length - 1; i++) 
      { 
       writer.WriteLine(lines[i]); 
      } 
      writer.Write(lines[lines.Length - 1]); 
     } 
    } 
} 

यह मेरा नहीं है, मैं इसे .NET File.WriteAllLines leaves empty line at the end of file

संबंधित मुद्दे