Как проверить, существует ли CloudBlobDirectory или нет? - PullRequest
5 голосов
/ 08 февраля 2012

В программном обеспечении, которое я программирую, я пытаюсь создать виртуальную файловую систему поверх структуры BLOB-объектов Azure.

Много раз в процессе я получаю путь от системы, и мне нужноукажите, является ли путь Blob или просто виртуальным BlobDirectory, который предоставляет Azure.Я сделал это путем приведения его из одной формы в другую и обработки ошибки.

Но теперь, если я знаю, что путь указывает на виртуальный каталог, как я могу проверить, существует этот виртуальный каталог или нет?

Я могу получить ссылку на CloudBlobDirectory со следующим кодом:

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

Ответы [ 3 ]

10 голосов
/ 09 февраля 2012

В хранилище BLOB-объектов каталоги сами по себе не существуют. То, что вы можете иметь, это большой двоичный объект, имя которого можно интерпретировать как находящееся в каталоге. Если вы посмотрите на базовый REST API , то увидите, что в каталогах ничего нет. Клиентская библиотека хранилища выполняет для вас поиск больших двоичных объектов, которые начинаются с имени каталога, а затем с разделителя, например "DirectoryA / DirectoryB / Filename.txt". Это означает, что для существования каталога он должен содержать большой двоичный объект. Чтобы проверить, существует ли каталог, вы можете попробовать:

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

или

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

Я знаю, что перечисление всего в каталоге просто для того, чтобы подсчитать, не является хорошей идеей, я уверен, что вы можете придумать лучший метод.

0 голосов
/ 06 мая 2019

Для Java это может использоваться:

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

означает, что каталог существует, иначе каталог не существует.

0 голосов
/ 08 февраля 2012

Не уверен, что вы можете использовать метод GetAttributes, и если он вызвал исключение, значит, каталог не существует. Я использовал аналогичный подход, чтобы проверить, существует ли BLOB-объект, но еще не тестировал каталог.

...