讲师中心 微信公众号

工具推荐

视频效率加速
剧云
剧云

中文短剧剧本制作平台

Laper
Laper

剧本策划到成片协作

updream

一键生成高质量推广成片

立刻MV
立刻MV

低成本歌曲 MV、视频生成

C# Azure File Share文件上传 C#如何像操作本地磁盘一样读写Azure文件共享

小墨小哥_6695

小墨小哥_6695

发布时间:2026-02-25 10:32:03

|

605人浏览过

|

来源于php中文网

原创

CloudFileClient 通过 REST API 操作 Azure 文件共享,需用 CloudFileShare 等四层对象而非本地路径;须正确初始化凭据、设置流位置为0、预估内存容量、避免路径编码与 SMB 混用。

c# azure file share文件上传 c#如何像操作本地磁盘一样读写azure文件共享

用 CloudFileClient 连上 Azure 文件共享,不是挂载成盘符

Azure 文件共享(Azure File Share)本质是 SMB 协议服务,但 C# SDK 不提供“映射为本地驱动器”这种 OS 层操作——它走的是 REST API 路径。所以你不能像 File.WriteAllText(@"Z: est.txt", "hi") 那样直接用路径写,必须通过 CloudFileClient + CloudFileShare + CloudFileDirectory + CloudFile 四层对象来操作。

常见错误现象:UnauthorizedAccessException 或 FileNotFoundException,往往是因为跳过了认证初始化,或误把共享名当成了目录路径传给 GetRootDirectoryReference()。

  • 连接前必须用 StorageCredentials(推荐用 StorageSharedKeyCredential,非 SAS Token)构造 CloudFileClient
  • 共享名(share name)是 URL 中的第三段,比如 https://mystorage.file.core.windows.net/myshare,myshare 才是 GetShareReference("myshare") 的参数
  • 根目录固定用 GetRootDirectoryReference() 获取,不要拼接 "\" 或 "/"

UploadFromStreamAsync 上传文件:注意流位置和缓冲区大小

上传不是“复制字节”,而是把流内容推到 Azure 文件服务。如果传入的 Stream 已经读到末尾(Position == Length),上传会成功但内容为空——这是最常被忽略的坑。

使用场景:上传内存流、文件流、HTTP 响应流等。不建议直接传 FileStream 且未设置 FileAccess.Read;也不建议用 MemoryStream 装 GB 级数据再上传,容易 OOM。

  • 上传前务必检查 stream.Position = 0,尤其对 MemoryStream
  • 大文件(>100MB)建议分块上传,用 UploadFromStreamAsync(stream, null, null, new FileRequestOptions { ParallelOperationThreadCount = 4 })
  • 默认单次上传上限是 256MB;超限会抛 StorageException,错误信息含 "The specified blob or block content is invalid."

下载文件时别直接 DownloadToStreamAsync 到未扩容的 MemoryStream

下载接口不会自动扩容目标 MemoryStream,如果它初始容量不足,会触发 ArgumentException: Stream was too long。这不是网络问题,是本地流容量没预估好。

C#
C#

"避开 C# 常见错误——空陷阱、异步陷阱、LINQ 陷阱及资源泄漏。"

下载

使用场景:读取配置文件、小图片、日志片段等需要即时解析的内容。若只是保存到磁盘,优先用 DownloadToFileAsync。

  • 安全做法:先调用 file.Properties.Length 获取大小,再创建对应容量的 MemoryStream,例如 new MemoryStream((int)file.Properties.Length)
  • 若长度未知(如某些元数据未刷新),改用 DownloadToStreamAsync(new MemoryStream()) 是可行的,但要注意 GC 压力
  • 下载大文件时,DownloadToStreamAsync 默认启用 4MB 缓冲区;如需控制内存占用,可通过 FileRequestOptions.BufferSizeInBytes 调整

权限与路径处理:SMB 挂载和 SDK 访问不能混用

如果你同时在 Windows 上用 net use Z: \mystorage.file.core.windows.netmyshare 挂载了共享,并在 C# 里也用 SDK 访问同一个共享,要注意两者路径语义不一致:SMB 挂载后路径是本地风格(Z: older ile.txt),SDK 是纯逻辑路径(folder/file.txt),且不支持 .. 向上遍历。

常见错误现象:用 SDK 创建了 logs/2024/06/app.log,但在挂载盘里看到 Z:logs%2F2024%2F06%2Fapp.log —— 这是因为 SDK 默认对路径做 URL 编码,而 SMB 客户端不处理编码。

  • 避免路径中出现空格、中文、#、? 等特殊字符;SDK 会自动编码,但解码行为不保证跨平台一致
  • SDK 不支持硬链接、符号链接、ACL 继承等 NTFS 特性;所有权限靠存储账户级 SAS 或 RBAC 控制
  • 并发写同一文件无锁机制,SDK 不提供原子重命名或条件更新(IfExists 只用于存在性判断,非 CAS)

真正麻烦的不是怎么写代码,而是得时刻记住:这不是本地磁盘,它没有当前工作目录、没有文件句柄、没有缓存一致性保障。每次操作都是独立 HTTP 请求,失败重试策略、超时设置、连接复用这些细节,比语法更决定成败。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

549

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1698

2024.03.01

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

15126

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

1765

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

4237

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

6401

2024.03.01

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7299

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3465

2024.08.29

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

40

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn