伙计我正在尝试将以_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.
我哪里出错了?
答案 0 :(得分:20)
你的斜线方向错误。在Windows上你应该使用反斜杠。 E.g。
string rootFolderPath = @"F:\model_RCCMREC\";
string destinationPath = @"F:\model_RCCMrecTransfered\";
答案 1 :(得分: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()
而不是+
来构建路径。)
答案 2 :(得分:4)
我是这样做的:
if (Directory.Exists(directoryPath))
{
foreach (var file in new DirectoryInfo(directoryPath).GetFiles())
{
file.MoveTo($@"{newDirectoryPath}\{file.Name}");
}
}
file是一种FileInfo类。它已经有一个名为MoveTo()的方法,它采用目标路径。
答案 3 :(得分: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));
}
}