将文件从一个文件夹移动到另一个 C#

Posted

技术标签:

【中文标题】将文件从一个文件夹移动到另一个 C#【英文标题】:Moving files from one folder to another C# 【发布时间】:2013-11-11 01:02:00 【问题描述】:

伙计们,我正在尝试将所有以 _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);

但是在执行这些代码时我得到一个错误提示。

不支持给定路径的格式。

我哪里做错了?

【问题讨论】:

不确定window中的文件传输是否支持_ 【参考方案1】:

我是这样弄的:

if (Directory.Exists(directoryPath))

    foreach (var file in new DirectoryInfo(directoryPath).GetFiles())
    
        file.MoveTo($@"newDirectoryPath\file.Name");
    

file 是 FileInfo 类的一种。它已经有一个名为 MoveTo() 的方法,该方法采用目标路径。

【讨论】:

我刚刚在我正在进行的项目中实现了这一点。感谢您的解决方案! :D 这是我唯一可以使用的解决方案。谢谢!!!【参考方案2】:

您的斜线方向错误。在 Windows 上,您应该使用反斜杠。例如

string rootFolderPath = @"F:\model_RCCMREC\";
string destinationPath = @"F:\model_RCCMrecTransfered\";

【讨论】:

你的意思是“在 windows 上你不应该使用正斜杠”吗?【参考方案3】:

请尝试以下功能。这工作正常。

功能:

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

        

【讨论】:

【参考方案4】:

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() 而不是+ 来构建路径。)

【讨论】:

以上是关于将文件从一个文件夹移动到另一个 C#的主要内容,如果未能解决你的问题,请参考以下文章

c# 移动单个文件到文件夹中

C#获取如何获取指定文件夹下文件的个数??、

使用 Python 将所有文件从一个目录移动到另一个目录

Google Cloud Storage - 将文件从一个文件夹移动到另一个文件夹 - 使用 Python

IMAP:如何将邮件从一个文件夹移动到另一个文件夹

QFile::copy create 会创建文件的副本还是将内容从一个文件移动到另一个文件?