[C#] 폴더가없는 경우 파일과 폴더를 어떻게 만듭니 까?

다음 파일을 작성 (또는 덮어 쓰기)하고 싶다고 상상해보십시오. C:\Temp\Bar\Foo\Test.txt

은 Using File.Create (..) 방법이 그것을 할 수 있습니다.

그러나 다음 폴더 중 하나가없는 경우 (위의 예제 경로에서)

  • 온도

그런 다음 DirectoryNotFoundException이 발생합니다.

.. 경로가 주어지면 해당 경로에 대한 파일 ..을 만드는 데 필요한 모든 폴더를 어떻게 재귀 적으로 만들 수 있습니까? Temp 또는 Bar 폴더가 있지만 Foo가 없으면 …도 생성됩니다.

간단하게하기 위해 보안 문제가 없다고 가정합니다.



답변

DirectoryInfo di = Directory.CreateDirectory(path);
Console.WriteLine("The directory was created successfully at {0}.",
    Directory.GetCreationTime(path));

참조 이 MSDN 페이지를 .

그것이 도움이 되길 바랍니다!


답변

다른 답변에서 언급 된 내용을 요약하려면 :

//path = @"C:\Temp\Bar\Foo\Test.txt";
Directory.CreateDirectory(Path.GetDirectoryName(path));

Directory.CreateDirectory 디렉토리를 재귀 적으로 작성하며 디렉토리가 이미 존재하는 경우 오류없이 리턴됩니다.

에 파일이 Foo있는 경우C:\Temp\Bar\Foo예외에 있으면 예외가 발생합니다.


답변

파일을 작성하기 전에 Directory.CreateDirectory 를 사용하십시오 . 폴더가 재귀 적으로 만들어집니다.


답변

. 경로를 지정하면 파일을 만드는 데 필요한 모든 폴더를 재귀 적으로 만드는 방법은 무엇입니까?

path로 지정된 모든 디렉토리 및 서브 디렉토리를 작성합니다.

Directory.CreateDirectory(path);

그러면 파일을 만들 수 있습니다.


답변

경로의 두 부분 (디렉토리 및 파일 이름)을 확인하고 존재하지 않는 경우이를 작성해야합니다.

File.Exists및 사용 하여 Directory.Exists존재하는지 확인 하십시오 . Directory.CreateDirectory전체 경로를 만들므로 디렉토리가 존재하지 않으면 한 번만 호출하면 파일을 만들 수 있습니다.


답변

Directory.CreateDirectory를 사용해야합니다.

http://msdn.microsoft.com/en-us/library/54a0at6s.aspx


답변

Directory.CreateDirectory ()를 원합니다.

다음은 내가 사용하는 클래스 (C #으로 변환)에 소스 디렉토리와 대상을 전달하면 해당 디렉토리의 모든 파일과 하위 폴더가 대상으로 복사됩니다.

using System.IO;

public class copyTemplateFiles
{


public static bool Copy(string Source, string destination)
{

    try {

        string[] Files = null;

        if (destination[destination.Length - 1] != Path.DirectorySeparatorChar) {
            destination += Path.DirectorySeparatorChar;
        }

        if (!Directory.Exists(destination)) {
            Directory.CreateDirectory(destination);
        }

        Files = Directory.GetFileSystemEntries(Source);
        foreach (string Element in Files) {
            // Sub directories
            if (Directory.Exists(Element)) {
                copyDirectory(Element, destination + Path.GetFileName(Element));
            } else {
                // Files in directory
                File.Copy(Element, destination + Path.GetFileName(Element), true);
            }
        }

    } catch (Exception ex) {
        return false;
    }

    return true;

}



private static void copyDirectory(string Source, string destination)
{
    string[] Files = null;

    if (destination[destination.Length - 1] != Path.DirectorySeparatorChar) {
        destination += Path.DirectorySeparatorChar;
    }

    if (!Directory.Exists(destination)) {
        Directory.CreateDirectory(destination);
    }

    Files = Directory.GetFileSystemEntries(Source);
    foreach (string Element in Files) {
        // Sub directories
        if (Directory.Exists(Element)) {
            copyDirectory(Element, destination + Path.GetFileName(Element));
        } else {
            // Files in directory
            File.Copy(Element, destination + Path.GetFileName(Element), true);
        }
    }

}

}