Saya mencoba mendeteksi apakah file ada saat runtime, jika tidak, buatlah. Namun saya mendapatkan kesalahan ini ketika saya mencoba menuliskannya:
Proses tidak dapat mengakses file 'myfile.ext' karena sedang digunakan oleh proses lain.
string filePath = string.Format(@"{0}\M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre);
if (!File.Exists(filePath))
{
File.Create(filePath);
}
using (StreamWriter sw = File.AppendText(filePath))
{
//write my text
}
Ada ide tentang cara memperbaikinya?
File.Create()
metode! Potongan di atas sudah membuat file!Saya ingin memperbarui jawaban ini untuk mengatakan bahwa ini sebenarnya bukan cara paling efisien untuk menulis semua teks. Anda hanya boleh menggunakan kode ini jika Anda membutuhkan sesuatu yang cepat dan kotor.
Saya adalah seorang programmer muda ketika saya menjawab pertanyaan ini, dan saat itu saya pikir saya adalah seorang jenius karena memberikan jawaban ini.
sumber
FileStream(string, FileMode)
konstruktor dan meneruskannya ke FileMode.Create , yang akan menimpa file yang ada. Masih tidak perlu membuka file dua kali. Juga, jawaban ini diedit setelah saya memposting komentar asli saya..Close()
di akhir, sehingga berfungsi dalam hal apa pun. Saya tidak mempercayai sistem yang menggunakanFileStream
untuk semuanya karena saya tidak ingin pengecualian terjadiFileMode.Create
karena file tersebut sudah ada di sana - terutama ketika saya ingin menghapus isinya dan tidak menambahkannyaFileMode.Open
. Bagi saya,FileStream
hanya benar-benar berfungsi setelah menyingkirkan file yang dipermasalahkan, lalu menulis ke sana. KarenaFile.Create
membiarkannya terbuka dan terkunci, tampaknya menambahkannya.Close()
adalah satu-satunya cara nyata untuk menangani skenario saya dan SO.Saat membuat file teks Anda dapat menggunakan kode berikut:
Menggunakan kode dari komentar Anda. File (aliran) yang Anda buat harus ditutup. File.Create mengembalikan filestream ke file yang baru saja dibuat .:
sumber
File.Create
kembaliFileStream
dan yang memilikiClose()
sumber
File.Create mengembalikan FileStream. Anda harus menutupnya ketika Anda telah menulis ke file:
Anda dapat menggunakan menggunakan untuk menutup file secara otomatis.
sumber
StreamWriter
seperti yang bisa disimpulkan dari penggunaannyaFile.AppendText
.Saya memperbarui pertanyaan Anda dengan cuplikan kode. Setelah indentasi yang tepat, segera jelas apa masalahnya: Anda menggunakan
File.Create()
tetapi tidak menutupFileStream
yang dikembalikan.Melakukannya dengan cara itu tidak perlu,
StreamWriter
sudah memungkinkan untuk menambahkan file yang sudah ada dan membuat file baru jika belum ada. Seperti ini:Yang menggunakan konstruktor ini
StreamWriter
.sumber
Pertanyaan ini telah dijawab, tetapi berikut adalah solusi dunia nyata yang memeriksa apakah direktori tersebut ada dan menambahkan angka di akhir jika file teks ada. Saya menggunakan ini untuk membuat file log harian pada layanan Windows yang saya tulis. Saya harap ini membantu seseorang.
sumber
Saya tahu ini adalah pertanyaan lama, tapi saya hanya ingin membuang ini ke sana yang masih bisa Anda gunakan
File.Create("filename")"
, tambahkan.Dispose()
saja.File.Create("filename").Dispose();
Dengan cara ini ia membuat dan menutup file untuk proses selanjutnya untuk menggunakannya.
sumber
File.Create(FilePath).Close();
dari jawaban di atas adathis.Dispose(true); GC.SuppressFinalize((object) this);
dalam implementasinya.Saya rasa saya tahu alasan pengecualian ini. Anda mungkin menjalankan cuplikan kode ini di beberapa utas.
sumber
Coba ini: Bagaimanapun, ini berfungsi, jika file tidak ada, itu akan membuatnya dan kemudian menulis ke sana. Dan jika sudah ada, tidak masalah itu akan terbuka dan menulis padanya:
sumber