1

指定した拡張子を持つファイルをコピーする目的で、C# 2010 を使用してアプリケーションを作成しています。.NET Framework 3.5 を使用します。

次のコードがあります。

    private void GetFiles()
    {
        bool validext;
        foreach (string filePath in Directory.GetFiles(SourcePath, "*.*", SearchOption.AllDirectories))
        {
            //Check if the file has a specified extension
            validext = false;
            foreach (string extension in ext)
                if (HasExtension(filePath, extension))
                {
                    validext = true;
                    break;
                }

            if ((validext && mode == 1) || (!validext && mode == 2))
            {
                Directory.CreateDirectory(Path.GetDirectoryName(filePath));
                to_copy.Add(filePath);
            }
        }
        totalcount = to_copy.Count;
    }

問題は次のコマンドにあります。

Directory.CreateDirectory(TrimFile(filePath));

例外は発生しません。作成する必要があるディレクトリ パスは有効であり、アプリケーションは管理者権限で実行されます。それでも、ディレクトリは作成されません。インターネットで検索しても答えが得られなかったので、私の質問は次のとおりです。

なぜ機能しないのDirectory.CreateDirectory(TrimFile(filePath));ですか?

編集: FileTrim 関数を に置き換えましたPath.GetDirectoryName(filePath)

4

2 に答える 2

4

コードを「デバッグ」しましょう

private void GetFiles()
{
    //1. Lets say SourcePath = "C:\some\kind\of\directory\"
    foreach (string filePath in Directory.GetFiles(SourcePath, "*.*", SearchOption.AllDirectories))
    {
        //2. Lets say we have file filePath = "C:\some\kind\of\directory\file.txt"

        //.. all validation

        //3. At this point Path.GetDirectoryName("C:\some\kind\of\directory\file.txt")
        //   returns "C:\some\kind\of\directory\"
        //4. Lets create that directory...but wait its already exist and contains some files! 
        //   Why create what already exists?
        Directory.CreateDirectory(Path.GetDirectoryName(filePath));
        to_copy.Add(filePath);
    }
}

つまり、ディレクトリ内の既存のファイルをすでにループしているため、CreateDirectory呼び出しは役に立たないというのが真実です。すべてのディレクトリに新しいサブディレクトリ「Temp」を作成する場合を除いて、次のようにする必要があります。

Directory.CreateDirectory(Path.Combine(Path.GetDirectoryName(filePath), "Temp"));

その後、C:\some\kind\of\directory\Tempディレクトリが作成されます。

ファイルを他のディレクトリにコピーするには、次のようにする必要があります。

string directoryToCopyFiles = @"C:\My\directory\of\file\copies";
if(!Directory.Exists(directoryToCopyFiles))
   Directory.CreateDirectory(directoryToCopyFiles);

File.Copy(Path.Combine(directoryToCopyFiles, Path.GetFileName(filePath)), filePath);

その後、C:\My\directory\of\file\copies以前に存在していなかった場合はディレクトリが作成され、同じ名前のファイルがそこにコピーされます。

于 2012-05-24T11:28:32.140 に答える