C#将整个可移动磁盘复制到共享文件夹

C#将整个可移动磁盘复制到共享文件夹,c#,copy,filesystems,directory,C#,Copy,Filesystems,Directory,在我的应用程序中,我需要将整个XDCam磁盘(prof.Broadcast Record Disk)复制到我们的文件服务器。但是,只有当源驱动器不是根目录时,下面的函数才会运行 不起作用 FileSystem.CopyDirectory("E:\\", serverPath + this.targtetDirectory + "\\", UIOption.AllDialogs); 工作 FileSystem.CopyDirectory("E:\\Clip\\", serverPath

在我的应用程序中,我需要将整个XDCam磁盘(prof.Broadcast Record Disk)复制到我们的文件服务器。但是,只有当源驱动器不是根目录时,下面的函数才会运行

不起作用

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

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

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

我过去就是这样做的:

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
}
void CopyAppFiles(字符串源路径,字符串)
{
字符串[]dirs=Directory.GetDirectories(SourcePath,“*”,SearchOption.AllDirectories);
string[]files=Directory.GetFiles(SourcePath,“*.*”,SearchOption.AllDirectories)
int totalOperations=dirs.length+files.length;
对于(int i=0;i

最好处理小文件,而不是以根目录为目标,尝试获取根目录的所有子目录并分别复制它们:

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

对于所有文件和目录,复制文件,对于目录,执行filesyste.copydirectory吗?当它“不工作”时,它在做什么?有错误吗?它是否完全不做任何事情,继续执行下一步的任何代码?这可能是一个权限问题-您需要能够从根目录复制吗?您是否希望复制所有文件夹-该方法不是递归的。如果是这样,根据文档-尝试复制根目录将导致IOException-因此您可能必须从根目录单独复制所有文件夹.copy(file,destinationDir+file.Substring(targetDirectory.Length));这导致ArgumentOutOfRange异常:(这很好。唯一的问题是我不再有进度条。所以这将是下一步要实现的事情。我需要一个进度条,因为旧的XDCam驱动器只有USB 2.0,磁盘最多可以包含50GB。所以我需要一些东西来监视复制过程。谢谢!