158

次のファイルを作成 (または上書き) したいとします:-C:\Temp\Bar\Foo\Test.txt

File.Create(..)メソッドを使用すると、これを実行できます。

ただし、次のフォルダーのいずれも持っていない場合 (上記のパスの例から)

  • 温度
  • バー
  • フー

次に、DirectoryNotFoundExceptionがスローされます。

パスが与えられた場合、そのパスのファイルを作成するために必要なすべてのフォルダーを再帰的に作成するにはどうすればよいでしょうか? Temp フォルダーまたは Bar フォルダーが存在するが、Foo フォルダーが存在しない場合は、それも作成されます。

簡単にするために、セキュリティの問題はないと仮定しましょう - すべての権限は問題ありません。

4

9 に答える 9

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

この MSDN ページを参照してください。

それが役立つことを願っています!

于 2010-07-08T07:56:59.423 に答える
16

ファイルを作成する前にDirectory.CreateDirectoryを使用します。フォルダーを再帰的に作成します。

于 2010-07-08T07:55:55.510 に答える
4

パスの両方の部分 (ディレクトリとファイル名) を確認し、存在しない場合はそれぞれを作成する必要があります。

File.Existsとを使用しDirectory.Existsて、それらが存在するかどうかを調べます。Directory.CreateDirectoryはパス全体を作成するため、ディレクトリが存在しない場合は一度だけ呼び出す必要があり、その後はファイルを作成するだけです。

于 2010-07-08T07:54:50.370 に答える
4

. パスが与えられた場合、そのパスのファイルを作成するために必要なすべてのフォルダーを再帰的に作成するにはどうすればよいですか?

パスで指定されたすべてのディレクトリとサブディレクトリを作成します。

Directory.CreateDirectory(path);

その後、ファイルを作成できます。

于 2010-07-08T07:56:48.787 に答える
2

Directory.CreateDirectory を使用する必要があります。

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

于 2010-07-08T07:56:04.220 に答える
1

アセンブリ/exeにFileIO権限があると仮定すると、それ自体は正しくありません。アプリケーションが管理者権限で実行されない場合があります。コードアクセスセキュリティとアクセス許可の要求 を考慮することが重要 ですサンプルコード:

FileIOPermission f2 = new FileIOPermission(FileIOPermissionAccess.Read, "C:\\test_r");
f2.AddPathList(FileIOPermissionAccess.Write | FileIOPermissionAccess.Read, "C:\\example\\out.txt");
try
{
    f2.Demand();
}
catch (SecurityException s)
{
    Console.WriteLine(s.Message);
}

.NETコードアクセスセキュリティを理解する

「コードアクセスセキュリティ」は実際に使用されていますか?

于 2010-07-08T09:41:32.693 に答える
0

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

}

}

于 2010-07-08T08:00:02.183 に答える