[英]How to copy directories and files from one external to another C# Console
我在外部驱动器失败的情况下运气非常糟糕,并且在很多情况下几乎失去了一切。 最后我有了创建一个控制台应用程序的想法,它可以自动“突袭”我的两个驱动器。 现在就获取目录信息而言,我得到了它。 出于某种原因,当我尝试从一个复制到另一个时,它说访问被拒绝? 有任何想法吗? 这是我迄今为止所做的。 (我只是先做我的电影和电视以进行测试)
错误是“未经授权的访问例外:拒绝访问路径 'D:\\External Backup\\Movies and TV\\Alien Quadrilogy'。”
string _movieDIR = @"D:\External Backup\Movies and TV";
string _movieDIR2 = @"G:\TEMP";
string[] movies = Directory.GetDirectories(_movieDIR);
foreach(string movie in movies)
{
File.Copy(movie, _movieDIR2);
}
Console.ReadLine();
string _movieDIR = @"D:\External Backup\Movies and TV";
string _movieDIR2 = @"G:\Movies and TV";
string[] movies = Directory.GetDirectories(_movieDIR);
if(Directory.Exists(@"G:\Movies and TV")){
Console.WriteLine("Purging old Movies Folder in G:");
Directory.Delete(@"G:\Movies and TV",true);
}
Console.WriteLine("Creating New Movies Folder in G:");
Directory.CreateDirectory(@"G:\Movies and TV");
double size = movies.Length;
double percent = 0.00;
double counter = 0;
foreach(string movie in movies)
{
Console.Write("\n\nCopying " + movie.ToString());
int pos = movie.IndexOf(@"V\");
Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory(movie, _movieDIR2+ @"\" + movie.Substring(pos+2).ToString(),true);
counter++;
percent = (counter / size)*100;
percent = Math.Round(percent,2);
Console.WriteLine("\n\nPercent Copied " + percent + "%\n\n");
}
Console.ReadLine();
如果您想复制目录,您可以使用Microsoft.VisualBasic
命名空间中方便的FileIO
方法。
string _movieDIR = @"D:\External Backup\Movies and TV";
string _movieDIR2 = @"G:\TEMP";
string[] movies = Directory.GetDirectories(_movieDIR);
foreach(string movie in movies)
{
Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory(_movieDIR, _movieDIR2);
}
看起来您正在使用 File.Copy 来尝试复制目录。
尝试使用以下链接中示例中的代码: http : //msdn.microsoft.com/en-us/library/cc148994.aspx
您正在尝试复制目录,但您不能这样做。 您需要遍历每个文件并单独复制它们。 您还需要一些代码来确保在目标目录中复制正确的文件夹树
这不是您认为的“权限”问题。 每个说这是因为您将文件夹传递给需要文件的 API 的人都是正确的。 这可以很简单地验证(此处使用 powershell):
ps c:\temp> [io.file]::openwrite("c:\temp")
Exception calling "OpenWrite" with "1" argument(s): "Access to the path 'c:\temp' is denied."
At line:1 char:1
+ [io.file]::OpenWrite("c:\temp")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : UnauthorizedAccessException
是的,这有点奇怪,但完全是故意的。 底层的 win32 API 将返回一个访问被拒绝的 HR,最终成为 .NET 阿联酋。
现在我回到我的办公桌,我可以完全回答。
您的代码不正确。 File.Copy
方法的定义是:
string sourceFileName, string destFileName
您需要为两者提供完整路径。 所以:
foreach(string movie in movies)
{
File.Copy(movie, _movieDIR2 + "\\" + Path.GetFileName(movie));
// ^^^^^ Extract the filename and append it to the directory
}
本质上,您是在说:
Copy D:\file.avi to G:\
当你应该说:
Copy D:\file.avi to G:\file.avi
我已验证您的代码适用于上述修复程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.