Saya ingin membuat file .txt dan menulisnya, dan jika file tersebut sudah ada, saya hanya ingin menambahkan beberapa baris lagi:
string path = @"E:\AppServ\Example.txt";
if (!File.Exists(path))
{
File.Create(path);
TextWriter tw = new StreamWriter(path);
tw.WriteLine("The very first line!");
tw.Close();
}
else if (File.Exists(path))
{
TextWriter tw = new StreamWriter(path);
tw.WriteLine("The next line!");
tw.Close();
}
Tapi baris pertama sepertinya selalu ditimpa ... bagaimana saya bisa menghindari penulisan pada baris yang sama (saya menggunakan ini dalam satu lingkaran)?
Saya tahu ini hal yang sangat sederhana, tetapi saya tidak pernah menggunakan WriteLine
metode ini sebelumnya. Saya benar-benar baru di C #.
c#
text-files
Berker Yüceer
sumber
sumber
if (file exists) { open file }
hampir selalu salah di semua bahasa pemrograman! Untuk .NET solusinya adalah menggunakanFile.Open(path, FileMode.Append, FileAccess.ReadWrite)
flag yang sesuai.File.Open
delegasi internal ke fungsi WinAPI (lihat komentar berikutnya) semoga mencegah kondisi balapan. Sebagian besar solusi di sini tidak melakukan ini dan cukup jelas tunduk pada kondisi lomba.Jawaban:
Gunakan konstruktor yang benar :
sumber
File.Open(path, FileMode.Append, FileAccess.ReadWrite)
dan memeriksa ukuran file melalui aliran yang dikembalikan.Lihat juga File.AppendAllText (). AppendAllLines akan menambahkan baris baru ke setiap baris tanpa harus meletakkannya di sana sendiri.
Kedua metode akan membuat file jika tidak ada sehingga Anda tidak perlu melakukannya.
sumber
sumber
Close()
dari suatuusing
pernyataan, karena semua sumber daya akan ditutup sebelum dibuang secara otomatis.Anda sebenarnya tidak perlu memeriksa apakah file itu ada, karena StreamWriter akan melakukannya untuk Anda. Jika Anda membukanya dalam mode-append, file akan dibuat jika tidak ada, maka Anda akan selalu menambahkan dan tidak pernah menulis berlebihan. Jadi cek awal Anda berlebihan.
sumber
File.AppendAllText menambahkan string ke file. Ini juga membuat file teks jika file tersebut tidak ada. Jika Anda tidak perlu membaca konten, itu sangat efisien. Case use adalah logging.
sumber
Anda hanya ingin membuka file dalam mode "append".
http://msdn.microsoft.com/en-us/library/3zc0w663.aspx
sumber
Ketika Anda memulai StreamWriter, itu menimpa teks yang ada di sana sebelumnya. Anda dapat menggunakan properti append seperti:
sumber
sumber
File.Open(path, FileMode.Append, FileAccess.ReadWrite)
dan memeriksa ukuran file melalui aliran yang dikembalikan.Anda bisa menggunakan FileStream. Ini melakukan semua pekerjaan untuk Anda.
http://www.csharp-examples.net/filestream-open-file/
sumber
Coba ini.
sumber
File.AppendText(path)
, dan dengan itu tidak perlu memeriksaFile.Exists(path)
. DanIf (not A) Else If (A)
adalah If / Else yang aneh. Pada dasarnya tidak ada hal yang baik dalam pertanyaan ini, tidak ada kode penjelasan yang merupakan versi redudan dari jawaban lain.File.Open(path, FileMode.Append, FileAccess.ReadWrite)
dan memeriksa ukuran file melalui aliran yang dikembalikan.Anda cukup menggunakan File.AppendAllText () Metode ini akan menyelesaikan masalah Anda. Metode ini akan menangani Pembuatan File jika tidak tersedia, membuka dan menutup file.
sumber
Dari dokumentasi microsoft, Anda dapat membuat file jika tidak ada dan menambahkannya dalam satu panggilan File.AppendAllText Method (String, String)
.NET Framework (versi saat ini) Versi Lainnya
Buka file, tambahkan string yang ditentukan ke file, dan kemudian tutup file. Jika file tidak ada, metode ini membuat file, menulis string yang ditentukan ke file, lalu menutup file. Namespace: System.IO Assembly: mscorlib (in mscorlib.dll)
Sintaksis C # C ++ F # VB public static void AppendAllText (jalur string, isi string) Tipe jalur parameter: System.String File untuk menambahkan string yang ditentukan. Tipe konten: System.String String untuk menambahkan ke file.
AppendAllText
sumber
sumber