2017-08-10 27 views
2

私はいくつかのコンテナを持っています。 Foreachコンテナフォルダ名を含む別のストレージアカウントから空のフォルダを追加したい。私はそれから必要なデータを入力します。コンテナにサブフォルダを作成Azure Cはプログラムで

コンテナ内にフォルダを作成できるプロパティがあるかどうかはわかりません。

ここで私はsourceAccountから2つの容器を持ち、もう1つはtargetAccountです。 sourceAccoutからtagetAccountにデータを送信しています。私のコンテナ内の私のターゲットアカウントでdayBlobサブフォルダを作成したい。

このセクションではすべてのコンテナを取得しています。私がこれらの容器を手に入れたら、それぞれの名前がわかります。私たちはせずに、フォルダを作成することはできません、私は

static CloudStorageAccount sourceAccount = new CloudStorageAccount(new StorageCredentials("name", "key"), true); 
static CloudStorageAccount targertAccount = new CloudStorageAccount(new StorageCredentials("name", "key"), true); 

     static void Main(string[] args) 
    { 
        DateTime dateToday = DateTime.Today; 

     DateTime date = new DateTime(); 
     DateTime dateutc = TimeZoneInfo.ConvertTimeToUtc(date); 
     TimeSpan startDay = new TimeSpan(00, 00, 00); 
     TimeSpan endDay = new TimeSpan(23, 59, 59); 
     var sourceClient = sourceAccount.CreateCloudBlobClient(); 
     var targetClient = targetAccount.CreateCloudBlobClient(); 
     var testContainer = sourceClient.GetContainerReference("test"); 
     var sourceContainer = sourceClient.GetContainerReference("downloads"); 
     var itDropBoxContainer = sourceClient.GetContainerReference("it-dropbox"); 
     var dayBlob = targetClient.GetContainerReference($"day{dateToday.Day}"); 

     date = DateTime.Parse($"{dateToday.Day}/{dateToday.Month}/{dateToday.Year}"); 
     var start = date + startDay; 
     var end = date + endDay; 
     IEnumerable<CloudBlobContainer> containers = sourceClient.ListContainers(); 

     foreach (var items in containers) 
     { 
      var containerName = items.Name; 

     } 

      foreach (IListBlobItem item in testContainer.ListBlobs(useFlatBlobListing: true)) 
      { 

       var blob = item as CloudBlockBlob; 
       var modificationDate = blob.Properties.LastModified; 
       // to set the modfication date as local time 
       var britishZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"); 
       var lastModified = TimeZoneInfo.ConvertTime((DateTimeOffset)modificationDate, britishZone); 
       if (lastModified > start && lastModified < end) 
       { 
        try 
        { 

         if (blob != null) 
         { 
          CloudBlockBlob sourceBlob = testContainer.GetBlockBlobReference(blob.Name); 
          CloudBlockBlob targetBlob = dayBlob.GetBlockBlobReference(blob.Name); 

          Console.WriteLine($"Successfully created a snapshot of blob {blob.Name}"); 
         } 
        } 
        catch (Exception ex) 
        { 

         ExceptionHandler.LogError(ex, "Failed to copy to the target folder"); 
        } 
       } 

       else 
       { 
        Console.WriteLine($"Failed to create a snapshot of blob {blob.Name}"); 

       } 

      } 
    } 
+0

あなたの質問を更新し、解決しようとしている問題を教えてください。ソースアカウントのブロブをコンテナ名のターゲットアカウントにコピーしたい場合は、ターゲットアカウントに31個のブロブコンテナがあります。空のフォルダはどこにありますか? –

+0

@GauravMantri私は自分の質問を更新しました。ターゲットコンテナごとに3つのフォルダを追加します。ソースコンテナ内のコンテナからこれらのフォルダの名前を取得したい –

+0

ありがとう!しかし、私はあなたのコードを理解しているかどうかはわかりません。 forEachループを終了すると、 'containerName'変数の値は常にストレージアカウントの最後のコンテナの名前になります。または、このループ内にのみサブフォルダを作成したいですか? –

答えて

1

を次のように@GauravMantriが述べたように私のコードは私のforeach

 foreach (var items in containers) 
     { 
      var containerName = items.Name; 

     } 

に入る名前と私のターゲットコンテナにサブフォルダを追加しますフォルダはブロブストレージ内の仮想エンティティであるため、独立しています。使用する前にフォルダを作成する必要はありません。たとえば、folder1がコンテナに存在しない場合でも、folder1の参照を取得できます。

var directory = container.GetDirectoryReference("folder1"); 
// Retrieve reference to a blob named "myblob". 
CloudBlockBlob blockBlob = directory.GetBlockBlobReference("myblob"); 

フォルダを作成する場合は、その中にブロブを作成する必要があります。

var directory = container.GetDirectoryReference("folder1"); 
CloudBlockBlob blockBlob = directory.GetBlockBlobReference("dummy.txt"); 
blockBlob.UploadFromByteArray(new byte[0], 0, 0); 

コンテナ内のすべてのフォルダを一覧表示するには、次のコードを使用します。

var folders = container.ListBlobs().Where(b => b as CloudBlobDirectory != null).ToList(); 
foreach (var folder in folders) 
{ 
    Console.WriteLine(folder.Uri); 
} 
+0

これは私が探していたものです。とにかくブロブ情報(ファイル名など)を指定する必要はありますか?または、ファイルがbyte []に​​変更される前にこれを行う必要がありますか? – Drew

関連する問題