फाइलों से पढ़ने और लिखने का सबसे आसान तरीका


342

C # में फ़ाइलों को पढ़ने और लिखने के कई अलग-अलग तरीके हैं ( पाठ फ़ाइलें , बाइनरी नहीं)।

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

जवाबों:


545

उपयोग File.ReadAllText और File.WriteAllText

यह सरल नहीं हो सकता ...

MSDN उदाहरण:

// Create a file to write to.
string createText = "Hello and Welcome" + Environment.NewLine;
File.WriteAllText(path, createText);

// Open the file to read from.
string readText = File.ReadAllText(path);

2
वास्तव में बहुत आसान है, लेकिन फिर सवाल पोस्ट करने की आवश्यकता क्यों थी? ओपी शायद, खुद और 17 अपवित्रों की तरह था, की तर्ज पर "गलत" दिशा में देख रहा था string.Write(filename)। Microsofts समाधान सरल / मेरा से बेहतर क्यों है?
रोलैंड

7
@ रोलैंड, In .net, फ़ाइल हैंडलिंग फ्रेमवर्क द्वारा प्रदान की जाती है, न कि भाषाओं (उदाहरण के लिए फ़ाइलों को घोषित करने और हेरफेर करने के लिए कोई C # कीवर्ड नहीं हैं)। स्ट्रिंग्स एक अधिक सामान्य अवधारणा है, इतना सामान्य है कि यह C # का हिस्सा है। इसलिए यह स्वाभाविक है कि फाइलें स्ट्रिंग के बारे में जानती हैं लेकिन विपरीत नहीं।
vc 74

Xml भी C # में डेटाटाइप्स के साथ एक सामान्य अवधारणा है और यहाँ हम XmlDocument.Save (फ़ाइल नाम) जैसे पाते हैं। लेकिन निश्चित रूप से अंतर यह है कि आमतौर पर एक एक्सएमएल ऑब्जेक्ट एक फ़ाइल से मेल खाती है, जबकि कई तार एक फ़ाइल बनाते हैं।
रोलैंड

7
@ रोलैंड यदि आप समर्थन करना चाहते हैं तो आप "foo".Write(fileName)आसानी से ऐसा करने के लिए एक्सटेंशन बना सकते हैं public static Write(this string value, string fileName) { File.WriteAllText(fileName, value);}और इसे अपनी परियोजनाओं में उपयोग कर सकते हैं।
अलेक्सेई लेवेनकोव

1
वहाँ भी फ़ाइल है। ViteAllLines (फ़ाइल नाम, स्ट्रिंग [])
मिच गेहूं

163

इसके अलावा करने के लिए File.ReadAllText, File.ReadAllLinesऔर File.WriteAllText(और से समान सहायकों Fileवर्ग) में दिखाया गया है एक और जवाब आप उपयोग कर सकते हैं StreamWriter/ StreamReaderवर्गों।

पाठ फ़ाइल लिखना:

using(StreamWriter writetext = new StreamWriter("write.txt"))
{
    writetext.WriteLine("writing in text file");
}

पाठ फ़ाइल पढ़ना:

using(StreamReader readtext = new StreamReader("readme.txt"))
{
   string readText = readtext.ReadLine();
}

टिप्पणियाँ:

  • आप readtext.Dispose()इसके बजाय उपयोग कर सकते हैं using, लेकिन अपवादों के मामले में यह फ़ाइल / रीडर / लेखक को बंद नहीं करेगा
  • ध्यान रखें कि सापेक्ष पथ वर्तमान कार्यशील निर्देशिका के सापेक्ष है। आप निरपेक्ष पथ का उपयोग / निर्माण करना चाह सकते हैं।
  • मिसिंग using/ Close"डेटा फाइल करने के लिए क्यों नहीं लिखा गया" इसका बहुत सामान्य कारण है।

3
usingअन्य उत्तर में दिखाए गए अनुसार अपनी धाराओं को सुनिश्चित करें - stackoverflow.com/a/7571213/477420
अलेक्सई लेवेनकोव

5
StreamWriter और StreamReaderusing System.IO; का उपयोग करने की आवश्यकता है ।
मोटा

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

3
यह भी ध्यान देने योग्य है कि फ़ाइल में टेक्स्ट को जोड़ने के लिए एक अधिभार है: new StreamWriter("write.txt", true)यह एक फ़ाइल बनाएगा यदि फ़ाइल मौजूद नहीं है, अन्यथा यह मौजूदा फ़ाइल में संलग्न होगा।
आर्यनकारिणी

यह भी ध्यान देने योग्य है कि यदि आप एक फाइलस्ट्रीम (फाइलनाम के बजाय इसे पास करें) के साथ स्ट्रीमराइडर और स्ट्रीमराइटर का उपयोग करते हैं, तो आप केवल-पढ़ने के लिए मोड और / या साझा मोड में फाइलें खोल सकते हैं।
साइमन ज़ेक्स

18
FileStream fs = new FileStream(txtSourcePath.Text,FileMode.Open, FileAccess.Read);
using(StreamReader sr = new StreamReader(fs))
{
   using (StreamWriter sw = new StreamWriter(Destination))
   {
            sw.writeline("Your text");
    }
}

1
आप fsअंत में चेतावनी क्यों नहीं देते ?
लकीलीकी

1
@LuckyLikey क्योंकि StreamReader आपके लिए ऐसा करता है। हालांकि, 2 का उपयोग करना जरूरी नहीं है
नोवेटाटा

क्या तुम समझा सकते हो? क्यों StreamReader fs को निपटाना चाहिए ?? यह केवल sr को दूर कर सकता है जहाँ तक मैं देख सकता हूँ। क्या हमें यहां एक तीसरे कथन का उपयोग करने की आवश्यकता है?
फिलम

आप किसी उपयोग किए गए कथन में किसी वस्तु का निपटान नहीं करते हैं, जब कथन वापस किया जाता है तो निपटान विधि को स्वचालित रूप से कॉल किया जाएगा, और इससे कोई फर्क नहीं पड़ता कि कथन नेस्टेड हैं या नहीं, अंत में, कॉल स्टैक में सब कुछ ऑर्डर किया गया है।
पैट्रिक फोर्सबर्ग

11
using (var file = File.Create("pricequote.txt"))
{
    ...........                        
}

using (var file = File.OpenRead("pricequote.txt"))
{
    ..........
}

एक बार जब आप इसके साथ हो जाते हैं तो सरल, आसान और वस्तु का निपटान / सफाई भी करते हैं।


10

फ़ाइल से पढ़ने और फ़ाइल में लिखने का सबसे आसान तरीका:

//Read from a file
string something = File.ReadAllText("C:\\Rfile.txt");

//Write to a file
using (StreamWriter writer = new StreamWriter("Wfile.txt"))
{
    writer.WriteLine(something);
}

5
File.WriteAllTextभाग लिखने के लिए क्यों नहीं ?
पीटर मॉर्टेंसन

9

@AlexeiLevenkov ने मुझे एक और "सबसे आसान तरीका" बताया, जिसका नाम था विस्तार विधि । यह बस थोड़ा सा कोडिंग लेता है, फिर पढ़ने / लिखने का सबसे आसान तरीका प्रदान करता है, साथ ही यह आपकी व्यक्तिगत आवश्यकताओं के अनुसार विविधताएं बनाने के लिए लचीलापन प्रदान करता है। यहाँ एक पूर्ण उदाहरण है:

यह stringप्रकार पर विस्तार विधि को परिभाषित करता है । ध्यान दें कि केवल एक चीज जो वास्तव में मायने रखती है, अतिरिक्त कीवर्ड के साथ फ़ंक्शन तर्क है this, जिससे यह उस ऑब्जेक्ट को संदर्भित करता है जो विधि संलग्न है। वर्ग का नाम मायने नहीं रखता; वर्ग और विधि घोषित किया जाना चाहिए static

using System.IO;//File, Directory, Path

namespace Lib
{
    /// <summary>
    /// Handy string methods
    /// </summary>
    public static class Strings
    {
        /// <summary>
        /// Extension method to write the string Str to a file
        /// </summary>
        /// <param name="Str"></param>
        /// <param name="Filename"></param>
        public static void WriteToFile(this string Str, string Filename)
        {
            File.WriteAllText(Filename, Str);
            return;
        }

        // of course you could add other useful string methods...
    }//end class
}//end ns

इसका उपयोग कैसे करें string extension method, ध्यान दें कि यह स्वचालित रूप से संदर्भित है class Strings:

using Lib;//(extension) method(s) for string
namespace ConsoleApp_Sandbox
{
    class Program
    {
        static void Main(string[] args)
        {
            "Hello World!".WriteToFile(@"c:\temp\helloworld.txt");
            return;
        }

    }//end class
}//end ns

मुझे यह खुद कभी नहीं मिला, लेकिन यह बहुत अच्छा काम करता है, इसलिए मैं इसे साझा करना चाहता था। मज़े करो!


7

फ़ाइलों से लिखने और पढ़ने के लिए ये सबसे अच्छे और सबसे अधिक इस्तेमाल किए जाने वाले तरीके हैं:

using System.IO;

File.AppendAllText(sFilePathAndName, sTextToWrite);//add text to existing file
File.WriteAllText(sFilePathAndName, sTextToWrite);//will overwrite the text in the existing file. If the file doesn't exist, it will create it. 
File.ReadAllText(sFilePathAndName);

पुराना तरीका, जो मुझे कॉलेज में पढ़ाया जाता था, वह था स्ट्रीम रीडर / स्ट्रीम राइटर, लेकिन फाइल का उपयोग करना I / O तरीके कम क्लिंक होते हैं और कोड की कम लाइनों की आवश्यकता होती है। आप "फाइल" में टाइप कर सकते हैं। अपने IDE में (सुनिश्चित करें कि आप System.IO इंपोर्ट स्टेटमेंट को शामिल करते हैं) और उपलब्ध सभी तरीकों को देखें। नीचे दिए गए उदाहरण हैं पढ़ने के लिए / लिखने के लिए / पाठ फ़ाइलों से तार लिखने के लिए (.txt।) एक Windows प्रपत्र अनुप्रयोग का उपयोग कर।

किसी मौजूदा फ़ाइल में पाठ जोड़ें:

private void AppendTextToExistingFile_Click(object sender, EventArgs e)
{
    string sTextToAppend = txtMainUserInput.Text;
    //first, check to make sure that the user entered something in the text box.
    if (sTextToAppend == "" || sTextToAppend == null)
    {MessageBox.Show("You did not enter any text. Please try again");}
    else
    {
        string sFilePathAndName = getFileNameFromUser();// opens the file dailog; user selects a file (.txt filter) and the method returns a path\filename.txt as string.
        if (sFilePathAndName == "" || sFilePathAndName == null)
        {
            //MessageBox.Show("You cancalled"); //DO NOTHING
        }
        else 
        {
            sTextToAppend = ("\r\n" + sTextToAppend);//create a new line for the new text
            File.AppendAllText(sFilePathAndName, sTextToAppend);
            string sFileNameOnly = sFilePathAndName.Substring(sFilePathAndName.LastIndexOf('\\') + 1);
            MessageBox.Show("Your new text has been appended to " + sFileNameOnly);
        }//end nested if/else
    }//end if/else

}//end method AppendTextToExistingFile_Click

फ़ाइल एक्सप्लोरर / ओपन फ़ाइल संवाद के माध्यम से उपयोगकर्ता से फ़ाइल का नाम प्राप्त करें (आपको मौजूदा फ़ाइलों का चयन करने के लिए इसकी आवश्यकता होगी)।

private string getFileNameFromUser()//returns file path\name
{
    string sFileNameAndPath = "";
    OpenFileDialog fd = new OpenFileDialog();
    fd.Title = "Select file";
    fd.Filter = "TXT files|*.txt";
    fd.InitialDirectory = Environment.CurrentDirectory;
    if (fd.ShowDialog() == DialogResult.OK)
    {
        sFileNameAndPath = (fd.FileName.ToString());
    }
    return sFileNameAndPath;
}//end method getFileNameFromUser

मौजूदा फ़ाइल से टेक्स्ट प्राप्त करें:

private void btnGetTextFromExistingFile_Click(object sender, EventArgs e)
{
    string sFileNameAndPath = getFileNameFromUser();
    txtMainUserInput.Text = File.ReadAllText(sFileNameAndPath); //display the text
}

5

या, यदि आप वास्तव में लाइनों के बारे में हैं:

System.IO.File में एक स्थिर विधि WriteAllLines भी शामिल है , इसलिए आप ऐसा कर सकते हैं:

IList<string> myLines = new List<string>()
{
    "line1",
    "line2",
    "line3",
};

File.WriteAllLines("./foo", myLines);

5

जब आप पढ़ना चाहते हैं किसी भी फ़ाइल को ब्राउज़ करने के लिए OpenFileDialog नियंत्रण का उपयोग करना पढ़ना अच्छा है। नीचे कोड खोजें:

usingफ़ाइलों को पढ़ने के लिए निम्न कथन जोड़ना न भूलें :using System.IO;

private void button1_Click(object sender, EventArgs e)
{
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
         textBox1.Text = File.ReadAllText(openFileDialog1.FileName);  
    }
}

फ़ाइलों को लिखने के लिए आप विधि का उपयोग कर सकते हैं File.WriteAllText


2
     class Program
    { 
         public static void Main()
        { 
            //To write in a txt file
             File.WriteAllText("C:\\Users\\HP\\Desktop\\c#file.txt", "Hello and Welcome");

           //To Read from a txt file & print on console
             string  copyTxt = File.ReadAllText("C:\\Users\\HP\\Desktop\\c#file.txt");
             Console.Out.WriteLine("{0}",copyTxt);
        }      
    }

1

आप देख रहे हैं File, StreamWriterऔर StreamReaderवर्गों।


6
बहुत अनकहा जवाब। जवाब खोजने की उम्मीद में ओपी को अब इन शर्तों को पूरा करना होगा। सबसे अच्छा जवाब एक उदाहरण है।
tno2007

0
private void Form1_Load(object sender, EventArgs e)
    {
        //Write a file
        string text = "The text inside the file.";
        System.IO.File.WriteAllText("file_name.txt", text);

        //Read a file
        string read = System.IO.File.ReadAllText("file_name.txt");
        MessageBox.Show(read); //Display text in the file
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.