किसी स्ट्रीमड्राइटर का उपयोग करके किसी फ़ाइल में लाइनों को जोड़ें


170

मैं अपनी फाइल में लाइनों को जोड़ना चाहता हूं। मैं एक StreamWriter का उपयोग कर रहा हूँ:

StreamWriter file2 = new StreamWriter(@"c:\file.txt");
file2.WriteLine(someString);
file2.Close();

मेरी फ़ाइल का आउटपुट एक दूसरे के नीचे कई तार होना चाहिए, लेकिन मेरे पास केवल एक पंक्ति है, जो इस कोड को चलाने पर हर बार ओवरराइट हो जाती है।

क्या किसी तरह से किसी मौजूदा फ़ाइल में स्ट्रीमविटर को जोड़ने की अनुमति है?


19
निपटाने के लिए मत भूलना StreamWriter। एक usingब्लॉक इसके लिए बेहतर वाक्यविन्यास है।
TheCodeKing

1
ऐसा इसलिए भी है क्योंकि मैं File.AppendAllText - msdn.microsoft.com/en-us/library/ms143356.aspx
क्रिस

@ TheCodeKing - क्या आप मुझे ऐसा करने के लिए कुछ कोड दिखा सकते हैं?
स्टीम करें

4
@ब्लास्टोusing (var stream = new StreamWriter(..)) { stream.WriteLine(..); }
TheCodeKing

जवाबों:


279

इसके बजाय इसका उपयोग करें:

new StreamWriter("c:\\file.txt", true);

यदि आप फ़ाइल को जोड़ते हैं, या इसे अधिलेखित कर देते हैं, तो स्ट्रीमराइटर निर्माता के इस अधिभार के साथ आप इसे चुनते हैं।

C # 4 और ऊपर निम्नलिखित सिंटैक्स प्रदान करता है, जो कुछ अधिक पठनीय लगता है:

new StreamWriter("c:\\file.txt", append: true);


13

मुझे लगता है कि जब भी आप फ़ाइल में कुछ लिखते हैं, तो आप उपरोक्त सभी कोड निष्पादित कर रहे हैं । हर बार जब फ़ाइल के लिए स्ट्रीम खोली जाती है, तो उसके खोज सूचक को शुरुआत में तैनात किया जाता है, इसलिए सभी लिखते हैं कि यह पहले से ही ओवरराइटिंग है।

आप समस्या को दो तरीकों से हल कर सकते हैं: या तो सुविधाजनक के साथ

file2 = new StreamWriter("c:/file.txt", true);

या अपने आप को स्पष्ट रूप से स्ट्रीम पॉइंटर को बदलकर:

file2 = new StreamWriter("c:/file.txt");
file2.BaseStream.Seek(0, SeekOrigin.End);

क्या होगा यदि फ़ाइल में 10mb है और मैं 0 स्थिति से लिखना शुरू करता हूं, लेकिन केवल 10kb, मैं यह कैसे आश्वस्त कर सकता हूं कि फ़ाइल में केवल 10kb डेटा है जिसे मैंने अभी लिखा है?
जोबाडिनिज

10

इसे इस्तेमाल करे:

StreamWriter file2 = new StreamWriter(@"c:\file.txt", true);
file2.WriteLine(someString);
file2.Close();

7

इसे बदलें:

StreamWriter file2 = new StreamWriter("c:/file.txt");

इसके साथ:

StreamWriter file2 = new StreamWriter("c:/file.txt", true);

true इंगित करता है कि यह पाठ को जोड़ता है।



5

एक अन्य विकल्प System.IO.File.AppendText का उपयोग कर रहा है

यह StreamWriter के ओवरलोड के बराबर है जो दूसरों ने दिया है।

इसके अलावा File.AppendAllText स्ट्रीम को खोलने और बंद करने के बारे में चिंता किए बिना थोड़ा आसान इंटरफ़ेस दे सकता है। हालाँकि आपको अपनी खुद की लाइनब्रेक में डालने की चिंता करनी पड़ सकती है। :)


5

असल में बेसस्ट्रीम के साथ केवल जॉन का जवाब (9 सितंबर को 5 '11)। मेरे मामले के लिए काम किया। धन्यवाद जॉन! मैं एक ज़िप संग्रहीत txt फ़ाइल के लिए लाइनों को जोड़ने की जरूरत है ।

using (FileStream zipFS = new FileStream(@"c:\Temp\SFImport\test.zip",FileMode.OpenOrCreate))
{
    using (ZipArchive arch = new ZipArchive(zipFS,ZipArchiveMode.Update))
    {
        ZipArchiveEntry entry = arch.GetEntry("testfile.txt");
        if (entry == null)
        {
            entry = arch.CreateEntry("testfile.txt");
        }
        using (StreamWriter sw = new StreamWriter(entry.Open()))
        {
            sw.BaseStream.Seek(0,SeekOrigin.End);
            sw.WriteLine("text content");
        }
    }
}

3

एक और सरल तरीका इसका उपयोग कर रहा है, File.AppendTextयह यूटीएफ -8 एन्कोडेड टेक्स्ट को किसी मौजूदा फ़ाइल में या एक नई फ़ाइल में जोड़ देता है, यदि निर्दिष्ट फ़ाइल मौजूद नहीं है और रिटर्न देता हैSystem.IO.StreamWriter

using (System.IO.StreamWriter sw = System.IO.File.AppendText(logFilePath + "log.txt"))
{                                                
    sw.WriteLine("this is a log");
}

1

इस पंक्ति को बदलें:

StreamWriter sw = new StreamWriter("c:/file.txt");

इस कोड के साथ:

StreamWriter sw = File.AppendText("c:/file.txt");

और फिर अपनी लाइन को टेक्स्ट फाइल पर इस तरह लिखें:

sw.WriteLine("text content");
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.