删除C#子文件夹中的Azure Blob-不删除子文件夹

时间:2019-01-01 15:55:20

标签: c# azure azure-storage azure-storage-blobs

我有一个Azure容器“ MyContainer”,然后“在其下”,我有一个名为“ ProcessingFiles”的“子文件夹”。所以“结构”看起来像这样

MyContainer \ ProcessingFiles \ SampleFile.xml

我想删除'SampleFile.xml'-但是,当我运行以下代码时,'ProcessingFiles'文件夹也将删除。

 //connect to azure  container
            var storageAccount = CloudStorageAccount.Parse(_BlobConnectionstring);

            var myClient = storageAccount.CreateCloudBlobClient();
            var container = myClient.GetContainerReference(MyContainer");

            container.CreateIfNotExists(BlobContainerPublicAccessType.Blob);

            _blobabspath = container.Uri.AbsoluteUri;

            foreach (IListBlobItem blobItem in container.ListBlobs())
            {
                if (blobItem is CloudBlobDirectory)
                {
                    CloudBlobDirectory directory = (CloudBlobDirectory)blobItem;
                    if (directory.Uri.AbsoluteUri.Contains("ProcessingFolder))
                    {
                        IEnumerable<IListBlobItem> blobs = directory.ListBlobs(true);
                        ICloudBlob bi;
                        foreach (var blob in blobs)
                        {
                            if (blob is CloudBlockBlob)
                            {
                                bi = blob as CloudBlockBlob;
                                if (bi.Name.Contains(".xml"))
                                {
                                   Log.Info($"Deleting XML file : {bi.Name} from {_processingfolder}");
                                   bi.Delete();
                                }
                            }
                        }
                    }
                }
            }

如何仅删除单个XML文件-不包括子文件夹“ ProcessingFolder”?

我想念什么?提前谢谢

1 个答案:

答案 0 :(得分:3)

Azure Storage没有子文件夹,只有容器和Blob。 Azure存储通过分隔符为您提供了外观文件夹之类的东西(例如,让您进行特定搜索)。

您的Blob名称实际上是ProcessingFiles\SampleFile.xml。这就是为什么删除blob时子文件夹消失的原因。

只是为了进一步说明问题:假设您有一千个斑点,分布在多个“子文件夹”中,并且尝试仅过滤一个子文件夹(在您的情况下为ProcessingFiles)。搜索仍然会扫描所有数千个Blob,并过滤您指定名称的前缀部分。