当前位置: 首页 > 知识库问答 >
问题:

Azure CloudBlockBlob。DeleteIfExist()-false是否总是意味着blob不存在?

况喜
2023-03-14

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

然而,我很好奇,如果blob确实存在,会发生什么情况,但Azure中出现了一些错误,导致文件删除没有发生(我找不到任何关于该行为的文档)。

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

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

谢谢。

共有2个答案

楚俊迈
2023-03-14

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

如果blob存在并且可以删除,则返回true。如果blob不存在,则返回false。

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

不,如果blob存在并且我们无法删除它,则也返回false异常。我在我这边测试它。如果blob被租用,并且我们尝试删除它,那么我们将获得false和412异常。更多详细信息,您可以参考屏幕截图。

邰钟展
2023-03-14

在这里查看此方法的源代码,如果删除了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;
            }
        }
    }  
 类似资料:
  • 据我所知,<code>override</code>关键字声明给定的声明实现了一个基本<code>virtual</code>方法,如果没有找到匹配的基本方法,编译应该失败。 我对< code>final关键字的理解是,它告诉编译器任何类都不能覆盖这个< code >虚拟函数。 那么是多余的吗?它似乎编译得很好。最终传达哪些信息而信息不传达?这种组合的用例是什么?

  • 当服务器响应附带“content-encoding:gzip”时,是否一定意味着响应主体是gzip格式的?我正在解码传入的响应正文(可能不正确),并得到一个“不在GZIP格式”异常。

  • 我们有几个虚拟机在生产中运行数据服务,客户机向数据服务发送Restful HTTP请求,负载很重(通常每个主机每秒500个请求),每个虚拟机上的负载总是平衡的。我们在所有主机上都有相同的配置(2个CPU,) 两天前,我们看到其中5个虚拟机上的旧gen堆使用量开始增长(每天300 MB),其他虚拟机上的旧gen堆使用量保持不变(大约80 MB),我们正在努力找出根本原因,请问这是内存泄漏问题还是正常

  • 问题内容: 当我们创建扩展抽象类的Subclass对象时,抽象类构造函数也会运行。但是我们知道我们不能创建抽象类的对象。因此,这是否意味着即使构造函数无任何例外地完成运行,也不能保证是否创建了对象吗? 问题答案: 因此,这是否意味着即使构造函数无任何例外地完成运行,也不能保证是否创建了对象吗? 简而言之,a 不会创建对象。它只是 初始化 对象的 状态 。创建对象的是操作员。现在,让我们详细了解一下

  • 问题内容: 如果有Type [],则只能在其中存储Type或其子类型。ArrayList也是如此。那么为什么说一个是同质的而另一个却不是呢? 问题答案: 数组对添加的元素的类型进行运行时检查。也就是说,如果添加了一个不同类型的新元素,则在运行时将引发。这就是为什么它们被认为是“本地的”。 对于s(通常是s)而言,情况并非如此。由于在运行时进行类型擦除,因此它实际上可以容纳任何对象。 运行时,以下内

  • 我正在使用bcryptjs包对密码进行哈希和比较。 下面使用的方法是同步的,并返回一个布尔值。它是可靠的和工作的预期。 下一个示例使用异步方法。我担心的是,由于此版本是异步的,如果服务器上有任何延迟,它可能会在确定的值之前到达语句。这是一个合理的担心,还是我误解了这种类型的异步函数的性质?