我的目标是使用WindowsAzure.Storage API修改azure文件存储中的.txt
文件。我想知道是否有任何方法可以在文件中添加一些文本。
使用System.IO
API更容易吗?
我已经尝试过cloudFileStream.Write()
,但是没有用。
谢谢
答案 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()
方法。但这有一些限制,如果您对此感兴趣,我可以为您提供一些代码。