2013-06-12 1 views
1

방금 ​​배치 된 질문 중 하나 인 here을 물어 보았습니다. Azure의 완전한 초보자입니다.Azure 저장소의 텍스트 파일을 수정하십시오.

내 Azure 저장소 계정에 업로드 된 텍스트 파일이 있습니다. 이제는 작업자 역할에서 실행될 때마다 데이터베이스에서 일부 콘텐츠를 가져오고 해당 콘텐츠는 텍스트 파일의 내용을 새로운 내용으로 덮어 쓸 때마다 텍스트 파일을 업로드했습니다.

알고 싶습니다. 로컬 파일을 다운로드 한 다음 다시 수정하고 업로드하지 않고 텍스트 파일을 수정하는 방법이 있습니까?

"DownloadToStream"을 사용하여 텍스트의 형식으로 읽는 것과 같은 방법을 찾고 있습니다. 텍스트 파일에 텍스트 스트림을 업로드하는 것이 좋습니다.

+0

당신이 파일의 구조에 대해 조금 더 설명 할 수 있습니다

여기에 내가 위에서 언급 한 물건을 보여 샘플 코드는? 파일 구조가 미리 정의되었거나 무작위 일 수 있습니까? 파일을 수정하려면 임의의 위치에서 파일을 수정 하시겠습니까? 아니면 수정해야 할 부분을 정확히 알고 계십니까? –

+0

나는 그것이 완료 될 것 인 eaxtly 한 whre를 알고있다. .. 또한 구조는 고정된다, 그것은 단 하나의 열을 포함하고있는 텍스트 파일이다. – Spandan

답변

0

파일 구조가 고정되어 있다고 가정 해 보겠습니다. 당신을에 관계없이 파일의 크기, 이제 새로운 파일을 업로드 할 때 (파일을 가정하는 것은 존재하지 않는)

Line1: this is line 1 
Line2: this is line 2 
Line3: this is line 3 
... 
... 
... 

: 파일을 가정하면 각 항목은 새 행에 다음과 같이 보입니다 Put Block 및 Commit Block List를 사용하여 블록에 업로드해야합니다. 당신이 할 일은 각 줄에 블럭 ID를 할당하는 것입니다 (이상적으로 줄 번호와 동일한 줄 ID, 예를 들어 000001, 000002 등을 부여하고 싶을 때). 전체 파일이 업로드되면 차단 목록을 커밋합니다.

다음으로 파일을 업데이트하려면 먼저 커밋 된 블록 목록을 가져옵니다. 이제 2 번 줄을 바꾸고 싶다고 가정 해 봅시다. 당신이해야 할 일은 두 번째 블록에 블록 작동을 넣고 새로운 콘텐츠를 제공하는 것입니다. 블록이 커밋되면 블록 목록을 다시 커밋해야합니다.

var storageAccount = new CloudStorageAccount(new StorageCredentials("myaccount", "accountkey"), true); 
    var client = storageAccount.CreateCloudBlobClient(); 
    var container = client.GetContainerReference("mycontainer"); 
    container.CreateIfNotExists(); 
    var blob = container.GetBlockBlobReference("so.txt"); 
    List<string> blockIds = new List<string>(); 
    for (int i = 0; i < 10; i++) 
    { 
     int j = i + 1; 
     var blockId = Convert.ToBase64String(Encoding.UTF8.GetBytes(j.ToString("d6"))); 
     blockIds.Add(blockId); 
     string content = "Line " + j + ": this is line #" + j + "\r\n"; 
     using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(content))) 
     { 
      blob.PutBlock(blockId, ms, null); 
     } 
    } 
    blob.PutBlockList(blockIds); 
    int j1 = 2; 
    var blockIdNew = Convert.ToBase64String(Encoding.UTF8.GetBytes(j1.ToString("d6"))); 
    string newContent = "Line " + j1 + ": this is line #" + j1 + " - this is modified.\r\n"; 
    using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(newContent))) 
    { 
     blob.PutBlock(blockIdNew, ms, null); 
    } 
    blob.PutBlockList(blockIds);