디렉토리가 존재하지 않으면 중단되는 코드가 있습니다.
System.IO.File.WriteAllText(filePath, content);
한 줄 (또는 몇 줄)에서 새 파일로 이어지는 디렉토리가 존재하지 않는지 확인하고 존재하지 않는 경우 새 파일을 만들기 전에 만들 수 있습니까?
.NET 3.5를 사용하고 있습니다.
디렉토리가 존재하지 않으면 중단되는 코드가 있습니다.
System.IO.File.WriteAllText(filePath, content);
한 줄 (또는 몇 줄)에서 새 파일로 이어지는 디렉토리가 존재하지 않는지 확인하고 존재하지 않는 경우 새 파일을 만들기 전에 만들 수 있습니까?
.NET 3.5를 사용하고 있습니다.
답변:
(new FileInfo(filePath)).Directory.Create()
파일에 쓰기 전에
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);
Task.Run(() => );
.
다음 코드를 사용할 수 있습니다
DirectoryInfo di = Directory.CreateDirectory(path);
Directory.CreateDirectory
원하는 것을 정확하게 수행합니다. 디렉토리가 없으면 디렉토리를 만듭니다. 먼저 명시적인 검사를 수행 할 필요가 없습니다 .
path
디렉토리가 아닌 파일 인 경우 IOException을 발생 시킵니다. msdn.microsoft.com/ko-kr/library/54a0at6s(v=vs.110).aspx
파일을 존재하지 않는 디렉토리로 이동하는 우아한 방법은 기본 FileInfo 클래스에 대한 다음 확장을 작성하는 것입니다.
public static class FileInfoExtension
{
//second parameter is need to avoid collision with native MoveTo
public static void MoveTo(this FileInfo file, string destination, bool autoCreateDirectory) {
if (autoCreateDirectory)
{
var destinationDirectory = new DirectoryInfo(Path.GetDirectoryName(destination));
if (!destinationDirectory.Exists)
destinationDirectory.Create();
}
file.MoveTo(destination);
}
}
그런 다음 새로운 MoveTo 확장을 사용하십시오.
using <namespace of FileInfoExtension>;
...
new FileInfo("some path")
.MoveTo("target path",true);
메소드 확장 문서를 확인하십시오 .
당신은 사용할 수 있습니다 File.Exists를 파일이 존재하는지 확인하고 사용하여 만들 수 File.Create를 필요한 경우. 해당 위치에서 파일을 작성할 수있는 권한이 있는지 확인하십시오.
파일이 존재한다고 확신하면 안전하게 쓸 수 있습니다. 예방책이지만 코드를 try ... catch 블록에 넣고 계획대로 정확하게 진행되지 않으면 기능이 발생할 수있는 예외를 포착해야합니다.
var filePath = context.Server.MapPath(Convert.ToString(ConfigurationManager.AppSettings["ErrorLogFile"]));
var file = new FileInfo(filePath);
file.Directory.Create();
디렉토리가 이미 존재하면이 방법은 아무 작업도 수행하지 않습니다.
var sw = new StreamWriter(filePath, true);
sw.WriteLine(Enter your message here);
sw.Close();