Saya memiliki sepotong kode di sini yang rusak jika direktori tidak ada:
System.IO.File.WriteAllText(filePath, content);
Dalam satu baris (atau beberapa baris), apakah mungkin untuk memeriksa apakah direktori yang mengarah ke file baru tidak ada dan jika tidak, untuk membuatnya sebelum membuat file baru?
Saya menggunakan .NET 3.5.
Jawaban:
Untuk membuat
(new FileInfo(filePath)).Directory.Create()
Sebelum menulis ke file..... Atau, Jika ada, maka buat (jika tidak, jangan lakukan apa pun)
sumber
Task.Run(() => );
.Anda dapat menggunakan kode berikut
sumber
Directory.CreateDirectory
tidak persis apa yang Anda inginkan: Ini menciptakan direktori jika belum ada. Tidak perlu melakukan pemeriksaan eksplisit terlebih dahulu .path
file dan bukan direktori. msdn.microsoft.com/en-us/library/54a0at6s(v=vs.110).aspxSeperti yang dikatakan @hitec, Anda harus yakin bahwa Anda memiliki izin yang tepat, jika Anda melakukannya, Anda dapat menggunakan baris ini untuk memastikan keberadaan direktori:
Directory.CreateDirectory(Path.GetDirectoryName(filePath))
sumber
Cara yang elegan untuk memindahkan file Anda ke direktori yang tidak ada adalah dengan membuat ekstensi berikut ke kelas FileInfo asli:
Kemudian gunakan ekstensi MoveTo baru:
Periksa Metode dokumentasi ekstensi .
sumber
Anda dapat menggunakan File.Exists untuk memeriksa apakah file tersebut ada dan membuatnya menggunakan File.Create jika diperlukan. Pastikan Anda memeriksa apakah Anda memiliki akses untuk membuat file di lokasi itu.
Setelah yakin file itu ada, Anda dapat menulis dengan aman. Meskipun sebagai tindakan pencegahan, Anda harus memasukkan kode Anda ke dalam percobaan ... tangkap blok dan tangkap untuk pengecualian yang kemungkinan fungsi akan naik jika semuanya tidak berjalan persis seperti yang direncanakan.
Informasi tambahan untuk konsep I / O file dasar .
sumber
var filePath = context.Server.MapPath(Convert.ToString(ConfigurationManager.AppSettings["ErrorLogFile"]));
var file = new FileInfo(filePath);
file.Directory.Create();
Jika direktori sudah ada, metode ini tidak melakukan apa-apa.var sw = new StreamWriter(filePath, true);
sw.WriteLine(Enter your message here);
sw.Close();
sumber