如何在azure文件存储中存储的文件中写入/修改/添加一些文本?

时间:2019-05-16 14:59:08

标签: asp.net cloud-storage azure-files

我的目标是使用WindowsAzure.Storage API修改azure文件存储中的.txt文件。我想知道是否有任何方法可以在文件中添加一些文本。

使用System.IO API更容易吗?

我已经尝试过cloudFileStream.Write(),但是没有用。

谢谢

2 个答案:

答案 0 :(得分:0)

https://github.com/Azure/azure-storage-net/blob/master/Test/WindowsRuntime/File/FileStreamTests.cs上的示例向您展示了如何执行此操作。

 public async Task FileOpenWriteTestAsync()
        {
            byte[] buffer = GetRandomBuffer(2 * 1024);
            CloudFileShare share = GetRandomShareReference();
            try
            {
                await share.CreateAsync();

                CloudFile file = share.GetRootDirectoryReference().GetFileReference("file1");
                using (CloudFileStream fileStream = await file.OpenWriteAsync(2048))
                {
                    Stream fileStreamForWrite = fileStream;
                    await fileStreamForWrite.WriteAsync(buffer, 0, 2048);
                    await fileStreamForWrite.FlushAsync();

                    byte[] testBuffer = new byte[2048];
                    MemoryStream dstStream = new MemoryStream(testBuffer);
                    await file.DownloadRangeToStreamAsync(dstStream, null, null);

                    MemoryStream memStream = new MemoryStream(buffer);
                    TestHelper.AssertStreamsAreEqual(memStream, dstStream);
                }
            }
            finally
            {
                share.DeleteIfExistsAsync().Wait();
            }
        }

答案 1 :(得分:0)

如果要在Azure文件存储上的文件中添加一些文本(附加到现有数据中),则没有直接方法。您需要下载它,然后上传要添加的文本。

            string accountName = "xxx";
            string key = "xxx";
            var storageAccount = new CloudStorageAccount(new StorageCredentials(accountName, key), true);
            var share = storageAccount.CreateCloudFileClient().GetShareReference("testfolder");
            CloudFile file1 = share.GetRootDirectoryReference().GetFileReference("a.txt");

            //if you want to append some text from local file
            var stream1 = File.OpenRead("your file path in local, like d:\hello.txt");
            string from_local_file = (new StreamReader(stream1)).ReadToEnd();

            //if you just want to add some text from string, directly use the string
            //string from_local_file ="the text I want to append to azure file";


            //download the content of the azure file
            string from_azure_file = file1.DownloadText();

            //this does the trick like appending text to azure file, not overwrite
            file1.UploadText(from_azure_file + from_local_file);

如果要直接将文本上传到存储在azure文件存储中的文件,则应使用以下方法之一:UploadText() / UploadFromFile() / UploadFromStream()请注意,这将覆盖azure文件中的现有数据。

如果要更新azure文件的上下文,可以使用WriteRange()方法。但这有一些限制,如果您对此感兴趣,我可以为您提供一些代码。