如何检查CloudBlobDirectory是否存在?

时间:2012-02-08 07:33:19

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

在我正在编程的软件中,我试图在Azure的blobs结构上创建一个虚拟文件系统。

在这个过程中,我多次从系统中获取路径,我需要判断路径是Blob还是只是azure提供的虚拟BlobDirectory。我通过将它从一种形式转换为另一种形式并处理错误来做到这一点。

但是现在,如果我知道路径指向虚拟目录,我该如何检查该虚拟目录是否存在?

我可以使用以下代码获取对CloudBlobDirectory的引用:

var blobDirectory = client.GetBlobDirectoryReference("Path_to_dir");

3 个答案:

答案 0 :(得分:10)

在blob存储中,目录本身不作为项存在。你可以拥有的是一个名称可以解释为在目录中的blob。如果你看一下基础REST API,你会发现目录中没有任何内容。存储客户端库为您做的是搜索以目录名称开头的blob,然后是分隔符,例如: “DirectoryA / DirectoryB / FILENAME.TXT”。这意味着,对于存在的目录,它必须包含blob。要检查目录是否存在,您可以尝试:

   
var blobDirectory = client.GetBlobDirectoryReference("Path_to_dir");
bool directoryExists = blobDirectory.ListBlobs().Count() > 0

bool directoryExists = client.ListBlobsWithPrefix("DirectoryA/DirectoryB/").Count() > 0

我知道列出目录中的所有内容只是为了得到计数并不是一个好主意,我相信你可以想出一个更好的方法。

答案 1 :(得分:0)

不确定是否可以使用GetAttributes方法,如果它引发异常,则表示不存在任何目录。我使用类似的方法来验证blob是否存在,但尚未在目录上进行测试。

答案 2 :(得分:0)

对于Java 可以使用:

container.getDirectoryReference(directoryName).listBlobs().iterator().hasNext() == true

意味着目录存在,否则不存在目录。