如何从blob容器中删除文件?

时间:2016-04-08 10:32:42

标签: c# azure

private readonly CloudBlobContainer _blobContainer;

public void Remove()
{
    if (_blobContainer.Exists())
    {
       _blobContainer.Delete();
    }
}

如何删除整个容器,而不是容器中的一些List<string> disks

6 个答案:

答案 0 :(得分:19)

这是我使用的代码:

private CloudBlobContainer blobContainer;

public void DeleteFile(string uniqueFileIdentifier)
{
    this.AssertBlobContainer();

    var blob = this.blobContainer.GetBlockBlobReference(fileName);
    blob.DeleteIfExists();
}

private void AssertBlobContainer()
{
    // only do once
    if (this.blobContainer == null)
    {
        lock (this.blobContainerLockObj)
        {
            if (this.blobContainer == null)
            {
                var client = this.cloudStorageAccount.CreateCloudBlobClient();

                this.blobContainer = client.GetContainerReference(this.containerName.ToLowerInvariant());

                if (!this.blobContainer.Exists())
                {
                    throw new CustomRuntimeException("Container {0} does not exist in azure account", containerName);
                }
            }
        }
    }

    if (this.blobContainer == null) throw new NullReferenceException("Blob Empty");
}

如果您知道不会同时访问锁定代码,则可以忽略锁定代码

显然,您对blobContainer内容进行了排序,因此您需要的是DeleteFile方法,而不是this.AssertBlobContainer()

答案 1 :(得分:2)

有一个名为DeleteIfExistis()的方法。返回true / false。

CloudBlockBlob blob = CloudBlobContainer.GetBlockBlobReference(fileName);
blob.DeleteIfExists();

文件名是ContainerName / FileName,如果在文件夹内,则也需要提及该文件夹。就像ContainerName / AppData / FileName一样,可以使用。

答案 2 :(得分:1)

执行删除的单行代码

private static async Task DeleteBLOBFile(string blobNamewithFileExtension)
        {
            BlobClient blobClient = new BlobClient(blobConnectionString,containerName,blobNamewithFileExtension);
            await blobClient.DeleteIfExistsAsync();            
        }

答案 3 :(得分:0)

List<string> FileNameList = new List<string>();
FileNameList = fileName.Split(',').Where(t => t.ToString().Trim() != "").ToList();
CloudBlobClient client;
CloudBlobContainer container;
CloudBlockBlob blob;
string accessKey;
string accountName;
string connectionString;
accessKey = Environment.GetEnvironmentVariable("StorageAccountaccessKey");
accountName = Environment.GetEnvironmentVariable("StorageAccountName");
connectionString = Environment.GetEnvironmentVariable("StorageAccountConnectionString");
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
client = storageAccount.CreateCloudBlobClient();
string containerName = tenantId;
container = client.GetContainerReference(containerName);

foreach(var file in FileNameList)
{
   blob = container.GetBlockBlobReference(file);
   blob.DeleteIfExists();
}

答案 4 :(得分:0)

我们可以使用cloudBlobContainer.ListBlobsSegmentedAsync列出blob,然后将其强制转换为ICloudBlob,以便执行DeleteIfExistsAsync。下面是工作示例函数。希望对您有所帮助。

public async Task < bool > PerformTasks() {
    try {
        if (CloudStorageAccount.TryParse(StorageConnectionString, out CloudStorageAccount cloudStorageAccount)) {
            var cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
            var cloudBlobContainer = cloudBlobClient.GetContainerReference(_blobContainerName);
            if (await cloudBlobContainer.ExistsAsync()) {
                BlobContinuationToken blobContinuationToken = null;
                var blobList = await cloudBlobContainer.ListBlobsSegmentedAsync(blobContinuationToken);
                var cloudBlobList = blobList.Results.Select(blb = >blb as ICloudBlob);
                foreach(var item in cloudBlobList) {
                    await item.DeleteIfExistsAsync();
                }
                return true;
            }
            else {
                _logger.LogError(ErrorMessages.NoBlobContainerAvailable);
            }
        }
        else {
            _logger.LogError(ErrorMessages.NoStorageConnectionStringAvailable);
        }
    }
    catch(Exception ex) {
        _logger.LogError(ex.Message);
    }
    return false;
}

答案 5 :(得分:0)

使用SDK v11 has been deprecated记住SDK v12

using Azure.Storage.Blobs;
...
BlobServiceClient blobServiceClient = new BlobServiceClient("StorageConnectionString");
BlobContainerClient cont = blobServiceClient.GetBlobContainerClient("containerName");
cont.GetBlobClient("FileName.ext").DeleteIfExists();