ListBlobs()呼び出しの結果を反復しようとすると、「指定されたリソースが存在しません」という例外が発生します。直接アクセスするとblob属性を取得できますが、サブディレクトリ内のすべてのblobのリストを取得しようとしています。
問題がどこにあるかを正確に確認するために、この小さなテストを作成しました。ここにテストドライバーと2つの方法があります。最初のメソッド「GetBlockBlobDateTime」は正常に実行され、既存のBLOBの日時を返します。2番目のメソッド「GetBlobDirFiles」は同じ入力を使用し、でblobItemsを反復しようとすると、例外をスローします。
foreach (IListBlobItem blobItem in blobItems)
両方の方法で同じデータが使用されることに注意してください。私は何が欠けていますか?
public static void DoTest(string baseURL, string container, string directory, string fileName)
{
DateTime t = GetBlockBlobDateTime( baseURL, container, directory, fileName);
List<string> fileList = GetBlobDirFiles( baseURL, container, directory);
}
public static DateTime GetBlockBlobDateTime(string baseURL, string container, string directory, string fileName)
{
CloudBlobClient blobClient = new CloudBlobClient(baseURL);
CloudBlobDirectory blobDir = blobClient.GetBlobDirectoryReference(container);
CloudBlobDirectory subDirectory = blobDir.GetSubdirectory(directory);
CloudBlockBlob cloudBlockBlob = subDirectory.GetBlockBlobReference(fileName);
cloudBlockBlob.FetchAttributes();
DateTime cloudTimeStampUTC = cloudBlockBlob.Properties.LastModifiedUtc;
return cloudTimeStampUTC;
}
public static List<string> GetBlobDirFiles(string baseURL, string container, string directory)
{
CloudBlobClient blobClient = new CloudBlobClient(baseURL);
CloudBlobDirectory blobDir = blobClient.GetBlobDirectoryReference(container);
CloudBlobDirectory subDirectory = blobDir.GetSubdirectory(directory);
IEnumerable<IListBlobItem> blobItems = subDirectory.ListBlobs();
List<string> fileList = new List<string>();
foreach (IListBlobItem blobItem in blobItems)
{
fileList.Add(blobItem.Uri.ToString());
}
return fileList;
}