在我正在编程的软件中,我试图在Azure的blobs结构上创建一个虚拟文件系统。
在这个过程中,我多次从系统中获取路径,我需要判断路径是Blob
还是只是azure提供的虚拟BlobDirectory
。我通过将它从一种形式转换为另一种形式并处理错误来做到这一点。
但是现在,如果我知道路径指向虚拟目录,我该如何检查该虚拟目录是否存在?
我可以使用以下代码获取对CloudBlobDirectory
的引用:
var blobDirectory = client.GetBlobDirectoryReference("Path_to_dir");
答案 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
意味着目录存在,否则不存在目录。