使用Azure ShareDirectoryClient移动目录时报DirectoryNotFoundException如何解决
Azure文件共享跨共享移动目录解决方案
错误根因
System.IO.Directory.Move 是本地文件系统专属API,仅能识别当前设备的本地磁盘路径。你传入的directory1.Path是Azure文件共享内的相对路径,不存在于程序运行的本地环境,因此触发DirectoryNotFoundException异常。
前置依赖
确保你的项目已安装NuGet包 Azure.Storage.Files.Shares,且版本 ≥ 12.5.0,该版本开始官方支持跨共享目录移动操作。
可行实现代码
using Azure.Storage.Files.Shares; using System.Configuration; // 读取存储账户连接字符串 string connectionString = ConfigurationManager.ConnectionStrings["StorageConnection"].ConnectionString; // 源端配置 string sourceShareName = "Mysampleshare"; string sourceDirName = "Mysampledir"; // 目标端配置 string destShareName = "Mysampleshare2"; string destDirName = "Mysampledir2"; // 初始化源目录客户端 ShareClient sourceShare = new ShareClient(connectionString, sourceShareName); ShareDirectoryClient sourceDirClient = sourceShare.GetDirectoryClient(sourceDirName); try { // 跨共享移动核心逻辑:目标路径格式为 /<目标共享名>/<目标目录路径> ShareDirectoryClient destDirClient = sourceDirClient.Rename($"/{destShareName}/{destDirName}"); Console.WriteLine("目录移动成功"); } catch (Exception ex) { Console.WriteLine($"移动失败,错误信息:{ex.Message}"); }
注意事项
- 该方案仅支持同一存储账户下的跨共享移动,跨存储账户的目录移动需要先递归复制所有文件到目标路径,校验完整性后再删除源目录
- 移动操作默认递归移动目录下所有子目录与文件
- 如果目标路径已存在同名目录,会触发冲突异常,如需覆盖可提前判断目标目录是否存在,存在则先删除
- 如需异步操作,将
Rename方法替换为RenameAsync即可
内容的提问来源于stack exchange,提问作者Billy
相关产品推荐
相关产品推荐

