[英]Write a file to Azure Blob File Share line by line with ShareFileClient in C# Azure Function
我想在 Azure Blob 文件共享中逐步上传/创建一个文件,因为我不知道要写入的数据总量(逐行从数据库读取):
ShareClient share = new ShareClient(targetBlobStorageConnectionString, directoryName);
share.CreateIfNotExists();
ShareDirectoryClient directory = share.GetDirectoryClient("");
ShareFileClient file = directory.GetFileClient(fileName);
问题是:如果我创建文件(或想用 overwrite=true 写入它),我必须将 state 设为 maxLength - 我不知道。
var fileStream = file.OpenWrite(overwrite:false,position:0);
...
while(read) {
var data = System.Text.Encoding.UTF8.GetBytes(GetNewLine(...)+ "\n");
fileStream.Write(data, 0, data.Length);
}
fileStream.Close();
我希望在我写的每一行中调整文件的大小,但这对于 ShareFileClient 是不可能的。
还有其他方法可以将文件逐行写入 Azure Blob 文件共享吗?
ShareFileClient.OpenWrite()签名是:
public virtual System.IO.Stream OpenWrite (
bool overwrite,
long position,
Azure.Storage.Files.Shares.Models.ShareFileOpenWriteOptions options = default,
System.Threading.CancellationToken cancellationToken = default
);
不确定你从哪里得到这个maxLength
。 第二个参数是“开始写入的 blob 中的偏移量”。 不是maxLength
。
所以伪代码是:
file = directory.GetFileClient(fileName);
stream = file.OpenWrite(position=0)
byte[] hello = b'hello'
stream.write(hello)
stream.close()
num_bytes_in_hello = size(hello)
stream = file.OpenWrite(position=num_bytes_in_hello)
byte[] world = b'world'
stream.write(world)
stream.close()
也就是说,这是一个非常昂贵/糟糕的主意。 不要低估每次 REST API 通话的成本。
说:
使用您的代码,您将支付1,000,000/10,000 * 2 * 0.065
= $13
。 当您每天和每个月的每一天都这样做几次时,这些就会加起来。 (每行 2 次调用: write()
+ close()
可能调用flush
REST API)
相反,如果您每次写入100
行,则需要支付$0.13
。
实际数量会因地区/等级等而异,但规模保持不变。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.