32

_DONE で終わるすべてのファイルを別のフォルダーに移動しようとしています。

私は試した

//take all files of main folder to folder model_RCCMrecTransfered 
string rootFolderPath = @"F:/model_RCCMREC/";
string destinationPath = @"F:/model_RCCMrecTransfered/";
string filesToDelete = @"*_DONE.wav";   // Only delete WAV files ending by "_DONE" in their filenames
string[] fileList = System.IO.Directory.GetFiles(rootFolderPath, filesToDelete);
foreach (string file in fileList)
{
    string fileToMove = rootFolderPath + file;
    string moveTo = destinationPath + file;
    //moving file
    File.Move(fileToMove, moveTo);

しかし、これらのコードを実行すると、エラーが発生します。

指定されたパスの形式はサポートされていません。

どこで私は間違えましたか ?

4

4 に答える 4

30

あなたのスラッシュは間違った方向にあります。Windows では、バック スラッシュを使用する必要があります。例えば

string rootFolderPath = @"F:\model_RCCMREC\";
string destinationPath = @"F:\model_RCCMrecTransfered\";
于 2013-10-31T06:06:44.570 に答える
9

から返されるファイル名の配列にSystem.IO.Directory.GetFiles()は、フル パスが含まれます。( http://msdn.microsoft.com/en-us/library/07wt70x2.aspxを参照してください) これは、ソース ディレクトリと宛先ディレクトリをfile値に追加しても、期待どおりにならないことを意味します。のような値にF:\model_RCCMREC\F:\model_RCCMREC\something_DONE.wavなりfileToMoveます。行にブレークポイントを設定すると、File.Move()渡す値を確認できるため、このような状況のデバッグに役立ちます。

簡単に言えば、rootFolderPath適切な宛先パスを決定するために、各ファイルへの相対パスを決定する必要があります。役立つメソッドについては、System.IO.Pathクラス ( http://msdn.microsoft.com/en-us/library/system.io.path.aspx ) を参照してください。(特に、パスを構築するためPath.Combine()ではなく、考慮する必要があります。)+

于 2013-10-31T06:17:39.573 に答える
0

以下の機能をお試しください。これはうまくいきます。

関数:

public static void DirectoryCopy(string strSource, string Copy_dest)
    {
        DirectoryInfo dirInfo = new DirectoryInfo(strSource);

        DirectoryInfo[] directories = dirInfo.GetDirectories();

        FileInfo[] files = dirInfo.GetFiles();

        foreach (DirectoryInfo tempdir in directories)
        {
            Console.WriteLine(strSource + "/" +tempdir);

            Directory.CreateDirectory(Copy_dest + "/" + tempdir.Name);// creating the Directory   

            var ext = System.IO.Path.GetExtension(tempdir.Name);

            if (System.IO.Path.HasExtension(ext))
            {
                foreach (FileInfo tempfile in files)
                {
                    tempfile.CopyTo(Path.Combine(strSource + "/" + tempfile.Name, Copy_dest + "/" + tempfile.Name));

                }
            }
            DirectoryCopy(strSource + "/" + tempdir.Name, Copy_dest + "/" + tempdir.Name);

        }

        FileInfo[] files1 = dirInfo.GetFiles();

        foreach (FileInfo tempfile in files1)
        {
            tempfile.CopyTo(Path.Combine(Copy_dest, tempfile.Name));

        }
}
于 2017-01-10T14:23:23.560 に答える