2010-06-02 12 views
140

Mam tu kawałek kodu, który łamie jeśli katalog nie istnieje:Jak utworzyć katalog, jeśli nie istnieje, aby utworzyć plik?

System.IO.File.WriteAllText(filePath, content); 

w jednej linii (lub kilka linii), to jest możliwe, by sprawdzić, czy katalog prowadząc do nowego pliku nie robi istnieje, a jeśli nie, utworzyć go przed utworzeniem nowego pliku?

Używam .NET 3.5.

+0

Możliwy duplikat [Jeśli folder nie istnieje, utwórz go] (http://stackoverflow.com/questions/9065598/if-a-folder -does-not-exist-create-it) –

Odpowiedz

275

(new FileInfo(filePath)).Directory.Create() Przed zapisaniem do pliku.

Albo

System.IO.FileInfo file = new System.IO.FileInfo(filePath); 
file.Directory.Create(); // If the directory already exists, this method does nothing. 
System.IO.File.WriteAllText(file.FullName, content); 
+2

Eleganckie rozwiązanie, ponieważ obsługuje sytuacje wymagające tworzenia zagnieżdżonych folderów. –

-1

Można użyć numeru File.Exists, aby sprawdzić, czy plik istnieje i utworzyć go, jeśli jest to wymagane, za pomocą File.Create. Upewnij się, czy masz dostęp do tworzenia plików w tej lokalizacji.

Po upewnieniu się, że plik istnieje, możesz pisać do niego bezpiecznie. Chociaż jako środek ostrożności, powinieneś umieścić swój kod w próbie ... catch catch i złapać wyjątki, które funkcja prawdopodobnie podniesie, jeśli coś nie pójdzie dokładnie tak, jak zaplanowałeś.

Additional information for basic file I/O concepts.

+0

Początkowo źle przeczytałem twoje pytanie, które chciałeś napisać do pliku, który może nie istnieć. Koncepcje są zasadniczo takie same dla IO pliku i katalogu. – hitec

82

można użyć następującego kodu

DirectoryInfo di = Directory.CreateDirectory(path); 
+36

'Katalog.CreateDirectory' robi dokładnie to, co chcesz: Tworzy katalog, jeśli jeszcze nie istnieje. ** Najpierw nie trzeba wykonywać wyraźnej kontroli **. –

+4

Zgłasza wyjątek IOException, jeśli "ścieżka" jest plikiem, a nie katalogiem. https://msdn.microsoft.com/en-us/library/54a0at6s(v=vs.110).aspx – scaryman

25

Jak @hitec powiedział, trzeba mieć pewność, że masz odpowiednie uprawnienia, jeśli nie można korzystać z tej linii aby zapewnić istnienie katalogu:

Directory.CreateDirectory(Path.GetDirectoryName(filePath))

-1

var filePath = context.Server.MapPath(Convert.ToString(ConfigurationManager.AppSettings["ErrorLogFile"]));

var file = new FileInfo(filePath);

file.Directory.Create(); Jeśli katalog już istnieje, metoda ta nie robi nic.

var sw = new StreamWriter(filePath, true);

sw.WriteLine(Enter your message here);

sw.Close();

Powiązane problemy