请帮助我,我被困住了!
我想将指定路径中的所有子文件夹复制到另一个文件夹。我已经成功地在普通文件夹上,但有时我得到一个未经授权的感知,所有程序崩溃。 我希望能够继续运行该程序,只需跳过未授权访问文件夹......
有什么办法吗?
谢谢
这是我的代码:
foreach (string dirPath in Directory.GetDirectories(strSourcePath, "*",SearchOption.AllDirectories))
{
Directory.CreateDirectory(dirPath.Replace(strSourcePath, strTargetPath));
}
//Copy all the files
Foreach (string newPath in Directory.GetFiles(strSourcePath, "*.*",SearchOption.AllDirectories))
{
File.Copy(newPath, newPath.Replace(strSourcePath, strTargetPath));
}
当我尝试执行此行时发生崩溃:Directory.GetDirectories(strSourcePath, "*",
SearchOption.AllDirectories
答案 0 :(得分:3)
抓住异常并继续前进。
ex pseudocode:
for file in folder {
try {
operation
} catch (UnauthorizedAccessException ){
continue; //Probably should log here
}
}
答案 1 :(得分:1)
我不认为有一种内置的方法来递归枚举文件,当它在某个目录中获得异常时不会死亡。所以你需要自己实现递归。
如果枚举引发错误,您可以查看以下问题:
Enumerating Files Throwing Exception
如果是引发错误的复制,我只需为这些例外添加try catch
子句,然后继续下一个文件。
答案 2 :(得分:0)
您必须在try-catch错误句柄中包含目录和文件创建的两个部分。如果出现错误,只需记录错误或显示消息,但它将继续搜索并复制。
您还可以查看Recursively resume directory scan
错误的访问目录或文件失败的权限发生错误,但不用担心,它很顺利。不要忘记检查您是否从原始方设置了正确的权限。