C# 在winRt应用程序中获取blob列表

C# 在winRt应用程序中获取blob列表,c#,azure,windows-8,C#,Azure,Windows 8,我想列出容器中的水滴。对于桌面应用程序,Azure Storage SDK提供以下方法: CloudBlobContainer container = blobClient.GetContainerReference("myBlob"); container.ListBlobs(); 但是,没有使用该方法(可能是由于其阻塞性质)。我应该改用什么?您需要在blob容器上使用ListBlobsSegmentedAsync函数来获取blob列表。例如,请参见下面的代码: CloudStor

我想列出容器中的水滴。对于桌面应用程序,Azure Storage SDK提供以下方法:

CloudBlobContainer container = blobClient.GetContainerReference("myBlob"); 
container.ListBlobs();

但是,没有使用该方法(可能是由于其阻塞性质)。我应该改用什么?

您需要在blob容器上使用
ListBlobsSegmentedAsync
函数来获取blob列表。例如,请参见下面的代码:

    CloudStorageAccount account = new CloudStorageAccount(new StorageCredentials("accountname", "accountkey"), true);
    var client = account.CreateCloudBlobClient();
    var container = client.GetContainerReference("containername");
    BlobContinuationToken continuationToken = null;
    string prefix = null;
    bool useFlatBlobListing = true;
    BlobListingDetails blobListingDetails = BlobListingDetails.All;
    int maxBlobsPerRequest = 10;
    List<IListBlobItem> blobs = new List<IListBlobItem>();
    do
    {
        var listingResult = await container.ListBlobsSegmentedAsync(prefix, useFlatBlobListing, blobListingDetails, maxBlobsPerRequest, continuationToken, null, null);
        continuationToken = listingResult.ContinuationToken;
        blobs.AddRange(listingResult.Results);
    }
    while (continuationToken != null);
CloudStorageAccount=newcloudstorageaccount(newstoragecredentials(“accountname”、“accountkey”),true);
var client=account.CreateCloudBlobClient();
var container=client.GetContainerReference(“containername”);
BlobContinuationToken continuationToken=null;
字符串前缀=null;
bool useFlatBlobListing=true;
BlobListingDetails BlobListingDetails=BlobListingDetails.All;
int maxBlobsPerRequest=10;
List BLOB=新列表();
做
{
var listingResult=await container.ListBlobsSegmentedAsync(前缀,useFlatBlobListing,blobListingDetails,maxBlobsPerRequest,continuationToken,null,null);
continuationToken=listingResult.continuationToken;
blobs.AddRange(listingResult.Results);
}
while(continuationToken!=null);

修改代码以支持Azure 2.2

CloudStorageAccount account = new CloudStorageAccount(new StorageCredentials("accountname", "accountkey"), true);
var client = account.CreateCloudBlobClient();
var container = client.GetContainerReference("containername");
BlobContinuationToken continuationToken = null;
string prefix = null;
bool useFlatBlobListing = true;
BlobListingDetails blobListingDetails = BlobListingDetails.All;
int maxBlobsPerRequest = 10;
List<IListBlobItem> blobs = new List<IListBlobItem>();
do
{
    var listingResult = await container.ListBlobsSegmentedAsync(prefix, useFlatBlobListing, blobListingDetails, maxBlobsPerRequest, continuationToken, null, null);
    continuationToken = **listingResult.Result.ContinuationToken;**
    blobs.AddRange(**listingResult.Result.Results**);
}
while (continuationToken != null);
CloudStorageAccount=newcloudstorageaccount(newstoragecredentials(“accountname”、“accountkey”),true);
var client=account.CreateCloudBlobClient();
var container=client.GetContainerReference(“containername”);
BlobContinuationToken continuationToken=null;
字符串前缀=null;
bool useFlatBlobListing=true;
BlobListingDetails BlobListingDetails=BlobListingDetails.All;
int maxBlobsPerRequest=10;
List BLOB=新列表();
做
{
var listingResult=await container.ListBlobsSegmentedAsync(前缀,useFlatBlobListing,blobListingDetails,maxBlobsPerRequest,continuationToken,null,null);
continuationToken=**listingResult.Result.continuationToken**
blobs.AddRange(**listingResult.Result.Result**);
}
while(continuationToken!=null);

谢谢!干得好。你能解释一下,什么是BlobContinuationToken和prefix吗?由于blob存储服务是基于Internet的服务,你不能在一个请求中获得blob容器中的所有blob。Blob存储服务在单个请求中最多返回5000个Blob。如果一个blob容器中有5000多个blob,服务将返回一个令牌,您可以使用该令牌获取下一组blob。这就是BlobContainuationToken。您可以使用
prefix
来获取以特定
前缀开始的blob的部分列表。例如,如果您希望只获取以字母
“a”
开头的blob,您可以将其指定为前缀。我们可以用
string prefix=string.Empty
代替
string prefix=null
?是的。我想你可以。试试看!如何列出所有容器中的所有BLOB?是否有方法按降序列出BLOB以及如何进行偏移?