Azure CloudBlockBlob.DeleteIfExists() - false 是否总是表示 blob 不存在?

Ste*_*bob 3 azure azure-storage azure-storage-blobs

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

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

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

简而言之,如果我得到 false 值,是否总是意味着 blob 不存在,不需要删除,如果 Azure 端出现问题,我会得到某种异常?

谢谢。

Gau*_*tri 6

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

    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;
            }
        }
    }  
Run Code Online (Sandbox Code Playgroud)