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

Python使用ShareDirectoryClient判断Azure文件共享目录是否存在的方法

Azure 文件共享目录存在性校验解决方案

方案1:递归逐级校验路径

由于原生的list_directories_and_files、get_directory_properties接口仅能查询已存在父级下的资源,你可以将目标目录路径按分隔符拆分后逐层校验:

  • 将目标路径按/拆分,过滤空字符串得到层级列表,例如parent1/parent2/target会被拆分为["parent1", "parent2", "target"]
  • 初始化当前操作的目录客户端为文件共享的根目录客户端
  • 遍历每一级目录名称:
    • 调用v12及以上版本SDK内置的exists()方法校验当前层级目录是否存在,该方法已经封装了异常捕获逻辑
    • 若使用旧版本无exists()方法的SDK,可自行调用get_directory_properties(),捕获返回码为404 ResourceNotFound的异常即可判定当前目录不存在
    • 若目录不存在,可直接返回「路径不存在」的结果,或按需创建当前层级目录
    • 若目录存在,将当前目录客户端切换为当前层级的子目录客户端,继续遍历下一级即可

方案2:直接调用创建接口捕获特定异常(生产环境更推荐)

该方案不需要提前做多次查询,性能开销更低:

  • 直接调用SDK的目录创建方法,v12及以上版本SDK的create_directory方法支持传入recursive=True参数,会自动创建所有不存在的上级父目录
  • 捕获方法抛出的异常:
    • 若异常错误码为409 ResourceAlreadyExists,说明目标目录已存在,无需额外处理,直接执行后续逻辑即可
    • 其余错误码按正常业务异常逻辑处理即可

代码示例(Python Azure 文件存储 SDK v12)

from azure.storage.fileshare import ShareDirectoryClient
from azure.core.exceptions import ResourceExistsError

# 替换为你的实际配置
storage_conn_str = "存储账户连接字符串"
file_share_name = "文件共享名称"
target_dir_path = "你要创建/校验的父目录路径"

dir_client = ShareDirectoryClient.from_connection_string(
    conn_str=storage_conn_str,
    share_name=file_share_name,
    directory_path=target_dir_path
)

try:
    # recursive=True会自动递归创建所有不存在的上级目录
    dir_client.create_directory(recursive=True)
except ResourceExistsError:
    # 目标目录已存在,此处无需额外操作
    pass

内容的提问来源于stack exchange,提问作者user17058107

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:15:06