【问题标题】:Reading and Writing text file in Azure Storage在 Azure 存储中读取和写入文本文件
【发布时间】:2013-06-12 10:19:24
【问题描述】:

以下是先将一行文本保存到一个文本文件中,存在于 azure 存储中,然后读取并打印的代码。

string firstString = "this \t is \n a \t line \n are: ";            

            using (var memoryStream = new MemoryStream())
            {
                memoryStream.Write(System.Text.Encoding.UTF8.GetBytes(firstString), 0, System.Text.Encoding.UTF8.GetBytes(firstString).Length);
                blockBlob.UploadFromStream(memoryStream);
            }

            string text;
            using (var memoryStream = new MemoryStream())
            {
                blockBlob.DownloadToStream(memoryStream);
                text = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
                Trace.WriteLine(text);
            }

问题是 Trace.Writeline() 语句中没有打印任何内容。

首先我认为这可能是编码问题,所以我将文本文件的格式从 ASCII 更改为 UTF8,但仍然没有打印任何内容。 我在这里缺少什么,感谢任何帮助。

【问题讨论】:

    标签: azure azure-storage


    【解决方案1】:

    替换以下代码行:

     using (var memoryStream = new MemoryStream())
                {
                    memoryStream.Write(System.Text.Encoding.UTF8.GetBytes(firstString), 0, System.Text.Encoding.UTF8.GetBytes(firstString).Length);
                    blockBlob.UploadFromStream(memoryStream);
                }
    

        using (var memoryStream = new MemoryStream())
        {
            memoryStream.Write(System.Text.Encoding.UTF8.GetBytes(firstString), 0, System.Text.Encoding.UTF8.GetBytes(firstString).Length);
            memoryStream.Position = 0;
            blob.UploadFromStream(memoryStream);
        }
    

    发生的情况是,当您将字节数组写入memoryStream 时,您并未将流的位置重置为 0,因此正在上传 0 字节的 blob。

    【讨论】:

    • @Gaurav Mantri 当它是位图图像(不是文本)时有什么解决办法
    • @BasharAbuShamaa 相同的解决方案。应该也一样。
    • System.Text.Encoding.UTF8.GetBytes(MyBitMapImg) 不起作用!
    • 啊……我明白了。这将适用于基于文本的数据而不是二进制数据。您需要在位图图像上使用函数来读取流。您可能希望将您的问题作为一个单独的问题发布。
    • 是的,我做到了,谢谢:stackoverflow.com/questions/30784058/…
    【解决方案2】:

    使用MemoryStream时先写入内存,再从内存写入blob,最好直接写入blob,例如:

        using (var blobStream = blockBlob.OpenWrite())
        {
            var data = System.Text.Encoding.UTF8.GetBytes(firstString);
            blobStream.Write(data, 0, data.Length);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-21
      • 1970-01-01
      • 2016-10-06
      • 2021-04-01
      • 2017-04-25
      • 2019-10-26
      • 2012-09-15
      • 1970-01-01
      相关资源
      最近更新 更多