Cara termudah untuk membaca dan menulis ke file

341

Ada banyak cara berbeda untuk membaca dan menulis file ( file teks , bukan biner) di C #.

Saya hanya perlu sesuatu yang mudah dan menggunakan jumlah kode paling sedikit, karena saya akan bekerja dengan banyak file dalam proyek saya. Saya hanya butuh sesuatu stringkarena yang saya butuhkan hanyalah membaca dan menulis string.

ApprenticeHacker
sumber

Jawaban:

544

Gunakan File.ReadAllText dan File.WriteAllText .

Tidak mungkin lebih sederhana ...

Contoh 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);
vc 74
sumber
2
Memang sangat sederhana, tetapi mengapa kemudian perlu memposting pertanyaan? OP mungkin, seperti saya dan 17 pemberi suara, melihat ke arah yang "salah" di sepanjang garis string.Write(filename). Mengapa solusi Microsoft lebih sederhana / lebih baik daripada solusi saya?
Roland
7
@Roland, Di .net, penanganan file disediakan oleh framework, bukan bahasa (tidak ada kata kunci C # untuk menyatakan dan memanipulasi file misalnya). String adalah konsep yang lebih umum, sangat umum sehingga string adalah bagian dari C #. Oleh karena itu wajar bahwa file tahu tentang string tetapi tidak sebaliknya.
vc 74
Xml juga merupakan konsep umum dengan tipe data dalam C # dan di sini kita menemukan misalnya XmlDocument.Save (nama file). Tetapi tentu saja perbedaannya adalah bahwa biasanya satu objek Xml sesuai dengan satu file, sementara beberapa string membentuk satu file.
Roland
7
@Roland jika Anda ingin mendukung "foo".Write(fileName)Anda dapat dengan mudah membuat ekstensi untuk melakukannya sukai public static Write(this string value, string fileName) { File.WriteAllText(fileName, value);}dan menggunakannya dalam proyek Anda.
Alexei Levenkov
1
Ada juga File.WriteAllLines (nama file, string [])
Mitch Wheat
162

Selain File.ReadAllText, File.ReadAllLines, dan File.WriteAllText(dan pembantu serupa dari Filekelas) yang ditunjukkan dalam jawaban lain Anda dapat menggunakan StreamWriter/ StreamReaderkelas.

Menulis file teks:

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

Membaca file teks:

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

Catatan:

  • Anda bisa menggunakan readtext.Dispose()bukanusing , tetapi itu tidak akan menutup file / reader / writer jika ada pengecualian
  • Perlu diketahui bahwa jalur relatif relatif terhadap direktori kerja saat ini. Anda mungkin ingin menggunakan / membangun jalur absolut.
  • Tidak ada using/ Closeadalah alasan paling umum dari "mengapa data tidak ditulis ke file".
Bali C
sumber
3
Pastikan untuk usingstreaming Anda seperti yang ditunjukkan dalam jawaban lain - stackoverflow.com/a/7571213/477420
Alexei Levenkov
5
Perlu using System.IO;menggunakan StreamWriter dan StreamReader .
fat
1
Juga harus dicatat bahwa jika file tidak ada, StreamWriter akan membuat file ketika mencoba untuk WriteLine. Dalam hal ini write.txt akan dibuat jika tidak ada ketika WriteLine dipanggil.
TheMiddleMan
3
Juga perlu dicatat adalah bahwa ada kelebihan untuk menambahkan teks ke file: new StreamWriter("write.txt", true)Ini akan membuat file jika tidak ada file, selain itu akan ditambahkan ke file yang ada.
ArieKanarie
Yang juga perlu diperhatikan adalah bahwa Anda jika Anda menggunakan streamreader dan streamwriter bersamaan dengan FileStream (meneruskannya alih-alih nama file) Anda dapat membuka file dalam mode read-only dan / atau mode shared.
Simon Zyx
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");
    }
}
Swapnil
sumber
1
Mengapa Anda tidak setuju fspada akhirnya?
LuckyLikey
1
@ LuckyLikey karena StreamReader melakukan itu untuk Anda.
Bersarang
Bisakah Anda jelaskan? Mengapa StreamReader harus membuang fs ?? Itu hanya bisa membuang sr sejauh yang saya bisa lihat. Apakah kita memerlukan pernyataan penggunaan ketiga di sini?
Philm
Anda tidak pernah membuang objek dalam pernyataan menggunakan, ketika pernyataan dikembalikan metode buang akan dipanggil secara otomatis, dan tidak masalah jika pernyataan bersarang atau tidak, pada akhirnya, semuanya dipesan dalam tumpukan panggilan.
Patrik Forsberg
11
using (var file = File.Create("pricequote.txt"))
{
    ...........                        
}

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

Sederhana, mudah dan juga membuang / membersihkan objek setelah Anda selesai dengan itu.

Ankit Dass
sumber
10

Cara termudah untuk membaca dari file dan menulis ke file:

//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);
}
yazarloo
sumber
5
Mengapa tidak File.WriteAllTextuntuk menulis bagian?
Peter Mortensen
9

@AlexeiLevenkov menunjuk saya pada "cara termudah" lain yaitu metode ekstensi . Hanya butuh sedikit pengkodean, lalu memberikan cara termudah mutlak untuk membaca / menulis, ditambah lagi menawarkan fleksibilitas untuk membuat variasi sesuai dengan kebutuhan pribadi Anda. Ini adalah contoh lengkapnya:

Ini mendefinisikan metode ekstensi pada stringjenisnya. Perhatikan bahwa satu-satunya hal yang benar-benar penting adalah argumen fungsi dengan kata kunci tambahan this, yang membuatnya merujuk ke objek tempat metode dilampirkan. Nama kelas tidak masalah; kelas dan metode harus dideklarasikan 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

Ini adalah cara menggunakan string extension method, perhatikan bahwa ini merujuk secara otomatis ke 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

Saya tidak akan pernah menemukan ini sendiri, tetapi ini bekerja dengan baik, jadi saya ingin membagikan ini. Selamat bersenang-senang!

Roland
sumber
7

Ini adalah metode terbaik dan paling umum digunakan untuk menulis dan membaca dari file:

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);

Cara lama, yang saya diajarkan di perguruan tinggi adalah dengan menggunakan pembaca aliran / penulis aliran, tetapi File I / O kurang kikuk dan membutuhkan lebih sedikit baris kode. Anda dapat mengetik "File." di IDE Anda (pastikan Anda menyertakan pernyataan impor System.IO) dan lihat semua metode yang tersedia. Di bawah ini adalah contoh metode untuk membaca / menulis string ke / dari file teks (.txt.) Menggunakan Aplikasi Formulir Windows.

Tambahkan teks ke file yang ada:

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

Dapatkan nama file dari pengguna melalui file explorer / dialog file terbuka (Anda akan memerlukan ini untuk memilih file yang ada).

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

Dapatkan teks dari file yang ada:

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

Atau, jika Anda benar-benar tentang garis:

System.IO.File juga mengandung metode statis WriteAllLines , sehingga Anda bisa melakukannya:

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

File.WriteAllLines("./foo", myLines);
anhoppe
sumber
5

Ada baiknya saat membaca untuk menggunakan kontrol OpenFileDialog untuk menelusuri file apa pun yang ingin Anda baca. Temukan kode di bawah ini:

Jangan lupa untuk menambahkan usingpernyataan berikut untuk membaca file:using System.IO;

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

Untuk menulis file, Anda dapat menggunakan metode ini File.WriteAllText.

Tassisto
sumber
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);
        }      
    }
Md.Rakibuz Sultan
sumber
1

Anda sedang mencari File, StreamWriterdan StreamReaderkelas.

Slaks
sumber
6
Jawaban yang sangat tidak membantu. Berarti OP sekarang harus pergi google istilah ini dengan harapan menemukan jawaban. Jawaban terbaik adalah contoh.
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
    }
Alireza.m
sumber