如何在不指定大小的情况下创建 ShareFileClient 以便能够将数据流式传输到它?

How to create ShareFileClient without specifying it's size to be able to stream data to it?

我想使用 .NET 在 Azure FileShare 资源中的 FileShareClient 上创建新的 blob api。我无法在开始时指定它的大小(因为稍后会用数据填充它,例如用行填充的 csv 文件,最多几 GB)。

我试图在我的代码中使用这样的东西:

using Azure.Storage.Files.Shares

  ShareFileClient fileShare = new ShareFileClient(
            "MYConnectionString",
            "FileShareName",
            "TestDirectoryName");
  if (!fileShare.Exists())
        {
            fileShare.Create(0);
        }
var stream = fileShare.OpenWrite(true, 0);

[编辑] 我有一个例外:System.ArgumentException:'options.MaxSize must be set if overwrite is set to true' 有什么办法可以避免指定这个大小?

请尝试使用最新的软件包Azure.Storage.Files.Shares, version 12.5.0

注意,在代码new ShareFileClient()中,最后一个参数是directory name + file name

查看下面的代码:

        ShareFileClient f2 = new ShareFileClient(connectionString, shareName, dirName + "/test.txt");
        if (!f2.Exists())
        {
            f2.Create(0);
        }

可以创建0大小的文件,这里是测试结果:

Micro$ofts无限智慧:resize隐藏在SetHttpHeaders方法中

public void AppendFile(string filePath, byte[] data)
{
    ShareFileClient fileShare = new ShareFileClient(connectionString, shareClient.Name, filePath);
    if (!fileShare.Exists())
        fileShare.Create(0);

    for (int i = 0; i < 10; i++)
    {
        var properties = fileShare.GetProperties();
        var openOptions = new ShareFileOpenWriteOptions();

        fileShare.SetHttpHeaders(properties.Value.ContentLength + data.Length);

        var stream = fileShare.OpenWrite(false, properties.Value.ContentLength, openOptions);

        stream.Write(data, 0, data.Length);

        stream.Flush();
    }
}