【问题标题】:C# Copy entire Removeable Disk to shared folderC# 将整个可移动磁盘复制到共享文件夹
【发布时间】:2016-09-06 22:39:43
【问题描述】:

在我的应用程序中,我需要将整个 XDCam 磁盘(教授广播记录磁盘)复制到我们的文件服务器。但是,如果源驱动器不是根目录,则以下功能似乎才起作用。

不工作

    FileSystem.CopyDirectory("E:\\", serverPath + this.targtetDirectory + "\\", UIOption.AllDialogs);

工作

FileSystem.CopyDirectory("E:\\Clip\\", serverPath + this.targtetDirectory + "\\", UIOption.AllDialogs);

如何将整个磁盘复制到我的目标目录?

【问题讨论】:

  • 为所有文件和目录复制文件,并为目录做filesyste.copydirectory?
  • “不工作”时它在做什么?有错误吗?它是完全没有做任何事情并继续接下来的代码吗?
  • 这可能是权限问题 - 您是否需要才能从根目录复制?
  • 您是否希望复制所有文件夹 - 该方法不是递归的。如果是这样Best way to copy the entire contents of a directory in C#
  • 根据文档 - 尝试复制根目录将导致 IOException - 因此您可能必须分别从根目录复制所有文件夹

标签: c# copy filesystems directory


【解决方案1】:

这就是我过去的做法:

void CopyAppFiles(string SourcePath, string )
{
    foreach (string dirPath in Directory.GetDirectories(SourcePath, "*", SearchOption.AllDirectories))
    {
        Directory.CreateDirectory(dirPath.Replace(SourcePath, DestinationPath));
    }

    foreach (string newPath in Directory.GetFiles(SourcePath, "*.*", SearchOption.AllDirectories))
    {
        File.Copy(newPath, newPath.Replace(SourcePath, DestinationPath), true);
    }
}

随着进步,你可以做类似的事情

void CopyAppFiles(string SourcePath, string )
{
    string[] dirs = Directory.GetDirectories(SourcePath, "*", SearchOption.AllDirectories);
    string[] files = Directory.GetFiles(SourcePath, "*.*", SearchOption.AllDirectories)

    int totalOperations = dirs.length + files.length;

    for(int i = 0; i < dirs.length; i++)
    {
        Directory.CreateDirectory(dirs[i].Replace(SourcePath, DestinationPath));

        ReportProgress(i, totalOperations);
    }

    for(int i = 0; i < files.length; i++)
    {
        File.Copy(files[i], files[i].Replace(SourcePath, DestinationPath), true);

        ReportProgress(i + dirs.length, totalOperations);
    }
}

void ReportProgress(int currentOperation, int totalOperations)
{
    //TODO
}

最适合处理小文件

【讨论】:

  • 效果很好。唯一的问题是我没有进度条了。所以这将是接下来要实施的事情。我需要一个进度条,因为较旧的 XDCam 驱动器仅支持 USB 2.0,并且磁盘最多可包含 50GB。所以我需要一些东西来监控复制过程。谢谢!
【解决方案2】:

不要以根目录为目标,而是尝试获取根目录的所有子目录并单独复制它们:

string destinationDir = serverPath + this.targetDirectory + @"\";
foreach (var file in Directory.GetFiles(@"E:\", "*.*", System.IO.SearchOption.AllDirectories))
{
    File.Copy(file, destinationDir + file.Substring(targetDirectory.Length));
}

【讨论】:

  • File.Copy(file, destinationDir + file.Substring(targetDirectory.Length));这会导致 ArgumentOutOfRange 异常 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 2020-01-02
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多