みんな_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);
しかし、これらのコードを実行すると、エラーが発生します。
The given path's format is not supported.
どこで私は間違えましたか ?
スラッシュの方向が間違っています。 Windowsでは、バックスラッシュを使用する必要があります。例えば。
string rootFolderPath = @"F:\model_RCCMREC\";
string destinationPath = @"F:\model_RCCMrecTransfered\";
System.IO.Directory.GetFiles()
から返されるファイル名の配列には、フルパスが含まれます。 ( http://msdn.Microsoft.com/en-us/library/07wt70x2.aspx を参照)これは、file
値にソースおよび宛先ディレクトリを追加することはできないことを意味しますあなたが期待するものになるだろう。 fileToMove
の_F:\model_RCCMREC\F:\model_RCCMREC\something_DONE.wav
_のような値になります。 File.Move()
行にブレークポイントを設定すると、渡す値を見ることができ、このような状況のデバッグに役立ちます。
簡単に言うと、適切な宛先パスを決定するために、rootFolderPath
から各ファイルへの相対パスを決定する必要があります。役立つメソッドについては、_System.IO.Path
_クラス( http://msdn.Microsoft.com/en-us/library/system.io.path.aspx )をご覧ください。 (特に、パスの構築には_+
_ではなくPath.Combine()
を考慮する必要があります。)
私はこのようにしました:
if (Directory.Exists(directoryPath))
{
foreach (var file in new DirectoryInfo(directoryPath).GetFiles())
{
file.MoveTo($@"{newDirectoryPath}\{file.Name}");
}
}
fileはFileInfoクラスの一種です。宛先パスを取得するMoveTo()というメソッドが既にあります。
以下の機能をお試しください。これは正常に機能します。
関数:
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));
}
}