C# 将整个可移动磁盘复制到共享文件夹
C# Copy entire Removeable Disk to shared folder
在我的应用程序中,我需要将整个 XDCam 磁盘(教授广播记录磁盘)复制到我们的文件服务器。但是以下功能似乎只有在源驱动器不是根目录时才会起作用。
不工作
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
}
最适合小文件
不要以根目录为目标,而是尝试获取根目录的所有子目录并单独复制它们:
string destinationDir = serverPath + this.targetDirectory + @"\";
foreach (var file in Directory.GetFiles(@"E:\", "*.*", System.IO.SearchOption.AllDirectories))
{
File.Copy(file, destinationDir + file.Substring(targetDirectory.Length));
}
在我的应用程序中,我需要将整个 XDCam 磁盘(教授广播记录磁盘)复制到我们的文件服务器。但是以下功能似乎只有在源驱动器不是根目录时才会起作用。
不工作
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
}
最适合小文件
不要以根目录为目标,而是尝试获取根目录的所有子目录并单独复制它们:
string destinationDir = serverPath + this.targetDirectory + @"\";
foreach (var file in Directory.GetFiles(@"E:\", "*.*", System.IO.SearchOption.AllDirectories))
{
File.Copy(file, destinationDir + file.Substring(targetDirectory.Length));
}