azure - 修改Azure存储中的文本文件

标签 azure azure-storage azure-blob-storage

我只是问了一些错误的问题here .我是 Azure 的新手,所以请耐心等待。

我在我的Azure存储帐户中上传了一个文本文件。现在,在我的辅助角色中,我需要做的是每次运行它时,它都会从数据库中获取一些内容,并且该内容必须写入上传的内容中文本文件,具体来说,每次文本文件的内容都应该被一些新内容覆盖。

我想知道,有没有一种方法可以修改文本文件,而不是像通常那样先下载到本地,然后再修改并上传。

我正在寻找某种方式,比如以文本形式读取它的方式,使用“DownloadToStream”。我的意思是,我们不能在现有的文本文件中上传一些文本流吗?

最佳答案

鉴于您的文件结构是固定的,让我们举个例子。假设您的文件如下所示,其中每个条目都位于新行中:

Line1: this is line 1
Line2: this is line 2
Line3: this is line 3
...
...
...

现在,当您上传新文件时(假设该文件不存在),无论文件大小如何,您都需要使用 Put Block 和 Commit Block List 分块上传它们。您要做的就是为每行分配一个 block ID(理想情况下您希望给 block ID 与行号相同,例如 000001、000002 等)并放置这些行。上传整个文件后,您将提交阻止列表。

接下来,当想要更新文件时,您要做的第一件事就是获取已提交的阻止列表。现在假设您要更改第 2 行。您要做的是将 block 操作放在第二个 block 上并提供新内容。提交该 block 后,您需要再次提交 block 列表。

这是示例代码,说明了我上面提到的内容:

    var storageAccount = new CloudStorageAccount(new StorageCredentials("myaccount", "accountkey"), true);
    var client = storageAccount.CreateCloudBlobClient();
    var container = client.GetContainerReference("mycontainer");
    container.CreateIfNotExists();
    var blob = container.GetBlockBlobReference("so.txt");
    List<string> blockIds = new List<string>();
    for (int i = 0; i < 10; i++)
    {
        int j = i + 1;
        var blockId = Convert.ToBase64String(Encoding.UTF8.GetBytes(j.ToString("d6")));
        blockIds.Add(blockId);
        string content = "Line " + j + ": this is line #" + j + "\r\n";
        using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(content)))
        {
            blob.PutBlock(blockId, ms, null);
        }
    }
    blob.PutBlockList(blockIds);
    int j1 = 2;
    var blockIdNew = Convert.ToBase64String(Encoding.UTF8.GetBytes(j1.ToString("d6")));
    string newContent = "Line " + j1 + ": this is line #" + j1 + " - this is modified.\r\n";
    using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(newContent)))
    {
        blob.PutBlock(blockIdNew, ms, null);
    }
    blob.PutBlockList(blockIds);

关于azure - 修改Azure存储中的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17058855/

相关文章:

azure - 从 Azure Blob 下载特定文件的列表

c# - 我应该直接在桌面客户端中使用 DocumentClient (CosmosDB)

visual-studio-2013 - Windows Azure Queue - CloudQueue.GetMessage() 不适用于最新版本的 Microsoft.WindowsAzure.Storage (v5.0.0)

azure - 如何检查 azure block blob 中是否有数据

php - Azure SDK for php blob 下载导致内存不足

ruby - 在 Ruby 中下载 Azure Blob 时出现 NoMemoryError

python - 在 Azure Web 应用程序上部署 React - django 应用程序

Azure Function 根据输入绑定(bind)添加绑定(bind)

azure - 如何创建自定义实体而不继承 TableEntity 或实现 ITableEntity

c# - Windows azure Worker Role 每周发送电子邮件