Как написать / изменить / добавить текст в файл, хранящийся в хранилище файлов Azure? - PullRequest
0 голосов
/ 16 мая 2019

Моя цель - изменить файл .txt в хранилище файлов Azure с помощью API-интерфейса WindowsAzure.Storage.Хотелось бы узнать, есть ли какой-нибудь метод для добавления текста в файл.

Проще ли использовать System.IO API?

Я уже пробовал cloudFileStream.Write()но это не сработало.

Спасибо

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Если вы хотите добавить некоторый текст (добавить к существующим данным) в файл в хранилище файлов 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(). Но у него есть некоторые ограничения, если вам интересно, я могу предоставить вам некоторый код.

0 голосов
/ 16 мая 2019

Пример 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();
            }
        }
...