파일을 만들 디렉토리가 없으면 어떻게 만들 수 있습니까?


202

디렉토리가 존재하지 않으면 중단되는 코드가 있습니다.

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

한 줄 (또는 몇 줄)에서 새 파일로 이어지는 디렉토리가 존재하지 않는지 확인하고 존재하지 않는 경우 새 파일을 만들기 전에 만들 수 있습니까?

.NET 3.5를 사용하고 있습니다.



@TimSchmelter, "가능한 복제"는 정리하는 방법입니다. 비슷한 질문을 닫고 최상의 답변을 유지하십시오. 날짜는 필수가 아닙니다. 참조 meta.stackexchange.com/questions/147643/...을 당신이에 설명하십시오 투표를 필요로 동의하는 경우 meta.stackexchange.com/questions/281980/...
마이클 Freidgeim

답변:


394

만들다

(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);

5
중첩 된 폴더를 생성해야하는 상황을 처리하는 우아한 솔루션입니다.
데니 야곱

감사합니다! 나는 보았다 stackoverflow.com/questions/9065598을 ,하지만 난 파일의 절대 경로로 시작하고 싶어하고, 분할과 경로를 처리 싶지 않았다. 이제 FileInfo 인스턴스에서 디렉토리에 액세스 할 수 있음을 알고 있습니다.
Johann

이 작업을 수행하는 비동기 방법이 있습니까?
Joe Phillips

1
나는 당신이 그것을 할 수 있다고 생각합니다 Task.Run(() => );.
Don

107

다음 코드를 사용할 수 있습니다

  DirectoryInfo di = Directory.CreateDirectory(path);

41
Directory.CreateDirectory원하는 것을 정확하게 수행합니다. 디렉토리가 없으면 디렉토리를 만듭니다. 먼저 명시적인 검사를 수행 할 필요가 없습니다 .
Paolo Moretti

13
path디렉토리가 아닌 파일 인 경우 IOException을 발생 시킵니다. msdn.microsoft.com/ko-kr/library/54a0at6s(v=vs.110).aspx
scaryman

34

@hitec이 말했듯이 올바른 권한이 있는지 확인해야합니다. 그렇다면이 줄을 사용하여 디렉토리가 있는지 확인하십시오.

Directory.CreateDirectory(Path.GetDirectoryName(filePath))


0

파일을 존재하지 않는 디렉토리로 이동하는 우아한 방법은 기본 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);

메소드 확장 문서를 확인하십시오 .


-1

당신은 사용할 수 있습니다 File.Exists를 파일이 존재하는지 확인하고 사용하여 만들 수 File.Create를 필요한 경우. 해당 위치에서 파일을 작성할 수있는 권한이 있는지 확인하십시오.

파일이 존재한다고 확신하면 안전하게 쓸 수 있습니다. 예방책이지만 코드를 try ... catch 블록에 넣고 계획대로 정확하게 진행되지 않으면 기능이 발생할 수있는 예외를 포착해야합니다.

기본 파일 I / O 개념에 대한 추가 정보 .


존재하지 않는 파일에 쓰려는 질문을 처음에 잘못 읽었습니다. 파일 및 디렉토리 IO의 개념은 본질적으로 동일합니다.
hitec

-2

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();

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.