Azure CloudBlockBlob.DeleteIfExists() - false总是意味着blob不存在吗?

时间:2018-01-04 23:42:08

标签: azure azure-storage azure-storage-blobs

我知道如果blob存在,CloudBlockBlob.DeleteIfExists()将返回true,否则返回false。

但是我很好奇知道如果blob确实存在会发生什么,但Azure中出现问题导致文件删除不会发生(我无法找到有关该行为的任何文档)。 / p>

我担心的是它会返回false而不是抛出某种异常,所以我相信blob会被删除,当它实际上仍然存在时。

简而言之,如果我得到一个false值,那么 总是 意味着blob不存在,不需要删除,而且我和#39;如果在Azure结束时出现问题,会遇到某种异常吗?

感谢。

2 个答案:

答案 0 :(得分:4)

查看此方法here的源代码,如果blob被删除,您将获得true,如果blob(或blob容器)不存在,则false。在所有其他情况下(例如,blob是租用的,因此无法删除),将引发异常。这是相关的代码:

    public virtual bool DeleteIfExists(DeleteSnapshotsOption deleteSnapshotsOption = DeleteSnapshotsOption.None, AccessCondition accessCondition = null, BlobRequestOptions options = null, OperationContext operationContext = null)
    {
        BlobRequestOptions modifiedOptions = BlobRequestOptions.ApplyDefaults(options, BlobType.Unspecified, this.ServiceClient);
        operationContext = operationContext ?? new OperationContext();

        try
        {
            this.Delete(deleteSnapshotsOption, accessCondition, modifiedOptions, operationContext);
            return true;
        }
        catch (StorageException e)
        {
            if (e.RequestInformation.HttpStatusCode == (int)HttpStatusCode.NotFound)
            {
                if ((e.RequestInformation.ExtendedErrorInformation == null) ||
                    (e.RequestInformation.ExtendedErrorInformation.ErrorCode == BlobErrorCodeStrings.BlobNotFound) ||
                    (e.RequestInformation.ExtendedErrorInformation.ErrorCode == BlobErrorCodeStrings.ContainerNotFound))
                {
                    return false;
                }
                else
                {
                    throw;
                }
            }
            else
            {
                throw;
            }
        }
    }  

答案 1 :(得分:0)

  

我知道如果blob存在,CloudBlockBlob.DeleteIfExists()将返回true,否则返回false。

如果blob存在且可以删除,则返回true。 如果blob不存在,那么它将返回false。

  

简而言之,如果我得到一个虚假的值,它是否总是意味着blob不存在

不,如果blob存在且我们无法删除它,那么也会返回false而异常。我在他身边测试它。如果blob是租用的,我们尝试删除它,那么我们将得到false和412异常。 有关详细信息,请参阅屏幕截图。

enter image description here