.NET Standard中复制目录的函数是什么?原Framework方法无法使用
在.NET Standard中替代
My.Computer.FileSystem.CopyDirectory的解决方案 我太懂这种痛点了——在.NET Framework里用惯了My.Computer.FileSystem.CopyDirectory一键复制目录,换到.NET Standard突然发现这个API没了,而System.IO.Directory虽然管着目录的创建、删除、移动,却偏偏漏掉了复制功能!
别慌,咱们自己动手实现一个完全等效的方法就行,逻辑和原API一致,而且完美适配.NET Standard。这里有个现成的实现:
using System.IO; public static class DirectoryHelper { public static void CopyDirectory(string sourceDirectory, string destinationDirectory, bool overwriteExistingFiles = false) { // 先确保目标目录存在,不存在就创建 Directory.CreateDirectory(destinationDirectory); // 遍历复制源目录下的所有文件 foreach (string sourceFile in Directory.GetFiles(sourceDirectory)) { string destinationFile = Path.Combine(destinationDirectory, Path.GetFileName(sourceFile)); File.Copy(sourceFile, destinationFile, overwriteExistingFiles); // 可选:同步文件属性(比如只读、隐藏等) File.SetAttributes(destinationFile, File.GetAttributes(sourceFile)); } // 递归处理所有子目录 foreach (string sourceSubDir in Directory.GetDirectories(sourceDirectory)) { string destinationSubDir = Path.Combine(destinationDirectory, Path.GetFileName(sourceSubDir)); CopyDirectory(sourceSubDir, destinationSubDir, overwriteExistingFiles); } } }
用法说明
这个方法和你原来用的My.Computer.FileSystem.CopyDirectory几乎一模一样:
- 第一个参数是源目录路径,第二个是目标目录路径
- 第三个可选参数控制是否覆盖目标目录中已存在的文件(默认不覆盖)
- 递归复制所有子目录和文件,还可以同步原文件的属性(注释掉的那行如果需要就打开)
比如你原来的VB调用是:
My.Computer.FileSystem.CopyDirectory("C:\Source", "C:\Dest", True)
现在换成C#的话就是:
DirectoryHelper.CopyDirectory(@"C:\Source", @"C:\Dest", true);
这样就完美解决了.NET Standard没有内置目录复制方法的问题,而且代码很轻量,没有额外依赖。
内容的提问来源于stack exchange,提问作者Doug Null
相关产品推荐
相关产品推荐

