我有一个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”?
我想念什么?提前谢谢
答案 0 :(得分:3)
Azure Storage没有子文件夹,只有容器和Blob。 Azure存储通过分隔符为您提供了外观文件夹之类的东西(例如,让您进行特定搜索)。
您的Blob名称实际上是ProcessingFiles\SampleFile.xml
。这就是为什么删除blob时子文件夹消失的原因。
只是为了进一步说明问题:假设您有一千个斑点,分布在多个“子文件夹”中,并且尝试仅过滤一个子文件夹(在您的情况下为ProcessingFiles
)。搜索仍然会扫描所有数千个Blob,并过滤您指定名称的前缀部分。