You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:30:03