0

0

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

星降

星降

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

|

545人浏览过

|

来源于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 四层对象来操作。

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

  • 连接前必须用 StorageCredentials(推荐用 StorageSharedKeyCredential,非 SAS Token)构造 CloudFileClient
  • 共享名(share name)是 URL 中的第三段,比如 https://mystorage.file.core.windows.net/mysharemyshare 才是 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。这不是网络问题,是本地流容量没预估好。

超级简历WonderCV
超级简历WonderCV

免费求职简历模版下载制作,应届生职场人必备简历制作神器

下载

使用场景:读取配置文件、小图片、日志片段等需要即时解析的内容。若只是保存到磁盘,优先用 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工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

智谱清言 - 免费全能的AI助手
智谱清言 - 免费全能的AI助手

智谱清言 - 免费全能的AI助手

相关专题

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

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

246

2023.09.22

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

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

886

2024.03.01

登录token无效
登录token无效

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

6437

2023.09.14

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

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

838

2023.09.14

token怎么获取
token怎么获取

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

1087

2023.12.21

token什么意思
token什么意思

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

1691

2024.03.01

string转int
string转int

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

850

2023.08.02

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

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

584

2024.08.29

Steam官网正版入口与注册登录指南_新手快速进入游戏平台方法
Steam官网正版入口与注册登录指南_新手快速进入游戏平台方法

本专题系统整理Steam官网最新可用入口,涵盖网页版登录地址、新用户注册流程、账号登录方法及官方游戏商店访问说明,帮助新手玩家快速进入Steam平台,完成注册登录并管理个人游戏库。

0

2026.02.25

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 10.2万人学习

C 教程
C 教程

共75课时 | 4.9万人学习

C++教程
C++教程

共115课时 | 19.3万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号