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

Visual Studio 2022 C#连接Azure Blob/文件共享存储并复制文件求助

实现Azure Blob存储与文件共享存储的文件复制(C# + VS2022)

前置准备

  • 安装NuGet包:Azure.Storage.Blobs 和 Azure.Storage.Files.Shares,直接在VS的NuGet包管理器中搜索安装即可。
  • 获取Azure存储账户的连接字符串:在Azure门户的存储账户“访问密钥”页面复制其中一个连接字符串。

具体实现步骤

1. 初始化存储客户端

用存储连接字符串分别实例化BlobServiceClient和ShareServiceClient,用于操作Blob容器与文件共享。

2. 读取Blob文件内容

定位到目标Blob资源,将其内容下载到内存流中。

3. 写入文件共享

定位到文件共享的目标目录与文件,将读取到的流内容写入。

4. 异常与资源处理

确保流和客户端资源正确释放,捕获存储操作可能出现的异常(如权限不足、资源不存在等)。

完整代码示例

using Azure.Storage.Blobs;
using Azure.Storage.Files.Shares;
using System.IO;

namespace AzureStorageCopyDemo
{
    class Program
    {
        static async Task Main(string[] args)
        {
            // 替换为你的存储账户连接字符串
            string storageConnectionString = "你的存储账户连接字符串";
            
            // Blob配置:容器名称、目标Blob路径
            string blobContainerName = "sample-container";
            string blobFilePath = "source-files/report.xlsx";
            
            // 文件共享配置:共享名称、目标文件路径
            string fileShareName = "sample-share";
            string targetFilePath = "backup-files/report.xlsx";

            try
            {
                // 初始化Blob客户端
                BlobServiceClient blobService = new BlobServiceClient(storageConnectionString);
                BlobContainerClient blobContainer = blobService.GetBlobContainerClient(blobContainerName);
                BlobClient blobClient = blobContainer.GetBlobClient(blobFilePath);

                // 检查Blob是否存在
                if (!await blobClient.ExistsAsync())
                {
                    Console.WriteLine("指定的Blob文件不存在");
                    return;
                }

                // 初始化文件共享客户端
                ShareServiceClient shareService = new ShareServiceClient(storageConnectionString);
                ShareClient shareClient = shareService.GetShareClient(fileShareName);

                // 检查文件共享是否存在
                if (!await shareClient.ExistsAsync())
                {
                    Console.WriteLine("指定的文件共享不存在");
                    return;
                }

                // 创建目标目录(若不存在)
                string directoryPath = Path.GetDirectoryName(targetFilePath);
                ShareDirectoryClient directoryClient = shareClient.GetDirectoryClient(directoryPath);
                await directoryClient.CreateIfNotExistsAsync();

                // 获取目标文件客户端
                ShareFileClient fileClient = directoryClient.GetFileClient(Path.GetFileName(targetFilePath));

                // 下载Blob内容到流并写入文件共享
                using (MemoryStream stream = new MemoryStream())
                {
                    await blobClient.DownloadToAsync(stream);
                    stream.Position = 0; // 重置流指针到起始位置

                    await fileClient.CreateAsync(stream.Length);
                    await fileClient.UploadAsync(stream);
                }

                Console.WriteLine("文件从Blob存储复制到文件共享成功!");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"复制失败:{ex.Message}");
            }
        }
    }
}

注意事项

  • 确保存储账户权限允许Blob读取和文件共享写入操作,生产环境推荐使用Azure AD身份验证替代存储账户密钥。
  • 大文件复制建议采用分块上传/下载方式,避免内存占用过高,可参考官方SDK的分块操作API实现。
  • 测试前需提前创建好Blob容器、待复制的Blob文件、文件共享,避免因资源不存在报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:10:33