当前位置: 首页 > 编程语言 > C#

Directory.Move不起作用(文件已存在)share

时间:2023-04-10 12:10:47 C#

Directory.Move不起作用(文件已存在)我有主文件夹:c:test我有2个文件夹:电影和照片。Photos有三个具有相同文件结构的文件夹:People、Animals和Buildings。我正在尝试这段代码:Directory.Move(@"c:testMovies",@"c:testTest");我得到异常:文件已存在此方法将递归移动文件夹的内容并覆盖现有文件。您应该添加一些异常处理。编辑:此方法是使用while循环和堆栈而不是递归实现的。publicstaticvoidMoveDirectory(stringsource,stringtarget){varstack=newStack();stack.Push(新文件夹(源,目标));while(stack.Count>0){varfolders=stack.Pop();Directory.CreateDirectory(文件夹。目标);foreach(varfileinDirectory.GetFiles(folders.Source,"*.*")){stringtargetFile=Path.Combine(folders.Target,Path.GetFileName(file));如果(File.Exists(targetFile))File.Delete(targetFile);File.Move(文件,targetFile);}foreach(varfolderinDirectory.GetDirectories(folders.Source)){stack.Push(newFolders(folder,Path.Combine(folders.Target,Path.GetFileName(folder))));}}Directory.Delete(源,真);}publicclassFolders{publicstringSource{get;私有集;}publicstringTarget{get;私有集;}publicFolders(stringsource,stringtarget){Source=source;目标=目标;}}更新:这是一个更简单的版本,使用Directory.EnumerateFiles发送而不是使用堆垛。这仅适用于.net4或更高版本,早期版本的.net将Directory.EnumerateFiles更改为Directory.GetFiles。publicstaticvoidMoveDirectory(stringsource,stringtarget){varsourcePath=source.TrimEnd('\','');vartargetPath=target.TrimEnd('\','');varfiles=Directory.EnumerateFiles(sourcePath,"*",SearchOption.AllDirectories).GroupBy(s=>Path.GetDirectoryName(s));foreach(文件中的var文件夹){vartargetFolder=folder.Key.Replace(sourcePath,targetPath);Directory.CreateDirectory(目标文件夹);foreach(文件夹中的var文件){vartargetFile=Path.Combine(targetFolder,Path.GetFileName(file));如果(File.Exists(targetFile))File.Delete(targetFile);File.Move(文件,目标文件);}}Directory.Delete(源,真);}目标目录不应该已经存在——Directory.Move方法会为您创建目标目录。ProcessStartInfop=newProcessStartInfo("cmd","/cmove"c:\test\Movies""c:\testTest\"");p.WindowStyle=ProcessWindowStyle.Hidden;//隐藏模式Process.Start(p);在将新内容复制到目标文件夹之前删除目标文件夹是否安全?Directory.Delete(@"c:testtest");Directory.Move(@"c:testmovies",@"c:testtest");Directory.Move失败最常见的两个原因是if:第二个问题的简单解决方法(coverage):以上就是C#学习教程的全部内容:Directory.Movedoesnotwork(文件已经存在),如果是对大家有用,需要详细了解C#学习教程,希望大家多多关注——错误的;vartmpDir=Path.Combine(Path.GetTempPath(),Path.GetRandomFileName());尝试{Directory.Move(destDirName,tmpDir);需要恢复=真;//仅当失败时Directory.Move(sourceDirName,destDirName);返回真;}catch(Exception){if(needRestore){Directory.Move(tmpDir,destDirName);}}最后{Directory.Delete(tmpDir,true);}}else{Directory.Move(sourceDirName,目标目录名);//可以抛出异常returntrue;}返回假;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: