2013-07-30 85 views
0

我將註冊條目記錄到CSV文件(因爲它稍後需要包括整個月的所有註冊),方法是將條目追加到該文件的最後一行:用於在Azure Blob中保存CSV日誌的最佳技術

using (StreamWriter w = new StreamWriter(currentPath, true)) 
{ 
    w.WriteLine(fileRow); 
} 

但在Windows Azure中,我無法訪問物理文件,所以我需要使用Blob存儲。

如何在Blob塊上執行相同的操作?

我想:

CloudBlobContainer blobContainer = blobStorage.GetContainerReference(containerName); 
cloudBlob = blobContainer.GetBlobReferenceFromServer(blobNameLogs); 

MemoryStream oldText = new MemoryStream(); 
cloudBlob.DownloadToStream(oldText); 

// record to save 
string fileRow = row.ToFileRow(); 

// append 
MemoryStream newText = new MemoryStream(); 
using (StreamWriter w = new StreamWriter(newText, System.Text.Encoding.Default)) 
{ 
    w.WriteLine(oldText); 
    w.WriteLine(fileRow); 

    // set blob data 
    cloudBlob.UploadFromStream(newText); 
} 

,但我一直在這個後的文件越來越0 bytes ...我缺少什麼?是否有簡單的操作來簡單地將文本附加到現有文件?

回答

0

我建議你的工作對象通過使用BlobStream,如下面的例子。

_container.CreateIfNotExist(); 

    CloudBlob inputBlob = _container.GetBlobReference(outputBlobUri); 
    CloudBlob outputBlob = _container.GetBlobReference(inputBlobUri); 

    using (BlobStream input = inputBlob.OpenRead()) 
    using (BlobStream output = outputBlob.OpenWrite()) 
    { 
    ProcessImage(input, output); 

output.Commit(); 
outputBlob.Properties.ContentType = "image/jpeg"; 
outputBlob.SetProperties(); 

FunnyAppRepository<Post> postRepository = new FunnyAppRepository<Post>(); 
Post post = postRepository.Find(partitionKey, rowkey); 

post.PostImage = outputBlobUri; 
post.State = true; 
postRepository.Update(post); 
postRepository.SubmitChange(); 

_queue.DeleteMessage(message); 
}