Я пробовал разные способы поиска файлов в папке, даже если Azure Обозреватель хранилища ясно показывает, что файлы присутствуют, и точно такой же код и конфигурация работали раньше, ListBlogsSementedAsyn c возвращает 0 файлов.
Используемый код:
var test = await directoryInfo.ListBlobsSegmentedAsync(new BlobContinuationToken());
var fileList = await directoryInfo.ListBlobsSegmentedAsync(true, BlobListingDetails.None, take, null, null, null, new CancellationToken());
Я использую учетные записи хранения, настроенные как Datalake v2.
У меня было то же самое с учетной записью хранилища, настроенной как стандартный BLOB-объект, в этом случае я мог бы переименовать папку, и она снова заработала бы. С переименованием данных не работает. В любом случае переименование не является приемлемым решением.
Я также пытался использовать разные BlobListingDetails, там ничего не получалось.
Процесс, который выполняется, состоит в том, что у меня есть отдельное задание, которое загружает файлы для обработки в папки, и это задание перечисляет первые X файлов в папке и загружает их для дальнейшей обработки. Это работает некоторое время, но через некоторое время, менее чем через день, ListBlobsSegmentedAsyn c возвращает 0 файлов. Когда я использую Azure Storage Explorer и проверяю папку, в ней находятся тысячи файлов, и на основе обработанных данных это правильный ответ.
РЕДАКТИРОВАНИЕ:
Реализовано с токеном продолжения:
var directoryInfo = _blobContainer.GetDirectoryReference(directory);
BlobContinuationToken blobContinuationToken = null;
var list = new List<IListBlobItem>();
do
{
var resultSegment = await directoryInfo.ListBlobsSegmentedAsync(blobContinuationToken);
// Get the value of the continuation token returned by the listing call.
blobContinuationToken = resultSegment.ContinuationToken;
list.AddRange(resultSegment.Results);
}
while (blobContinuationToken != null && list.Count < take); // Loop while the continuation token is not null.
var filePaths = list.Select(x => (x as IListBlobItem)?.Uri.ToString());
return filePaths.Where(x => !string.IsNullOrEmpty(x)).ToList();