получить все файлы, загруженные в общую папку учетной записи хранения в С#

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

Я пытался использовать этот код

IEnumerable fileList = cloudFileShare.GetRootDirectoryReference().ListFilesAndDirectories();

Но выдает ошибку, что «каталог облачных файлов» не содержит определения «список файлов и каталогов».

Я пытаюсь пройти через файловый ресурс и получить все файлы


person Bad_Coder    schedule 21.07.2020    source источник
comment
Пожалуйста, отредактируйте свой вопрос и включите полный код. Также укажите, какую версию SDK вы используете.   -  person Gaurav Mantri    schedule 21.07.2020
comment
Поскольку вы не поделились своим кодом, я создал свой собственный, который предоставит вам все файлы и папки.   -  person Daniel Björk    schedule 21.07.2020


Ответы (1)


Этот код получит все файлы во всех папках в Azure Fileshare.

using Azure.Storage.Files.Shares;
using System;
using System.IO;
using System.Threading.Tasks;

namespace GetAllStorageAccountFiles
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            var x = GetShareFilesAsync();
            x.Wait();
            Console.WriteLine("Done!");
            Console.ReadKey();
        }

        static async Task GetShareFilesAsync(string dirName = "")
        {
            string connectionString = "";

            // Name of the share, directory
            string shareName = "media";

            // Get a reference to a share
            ShareClient share = new ShareClient(connectionString, shareName);

            ShareDirectoryClient directory = share.GetDirectoryClient(dirName);
            var files = directory.GetFilesAndDirectories();

            foreach (var file in files)
            {
                if (file.IsDirectory)
                {
                    Console.WriteLine("Folder: " + Path.Combine(dirName, file.Name));
                    GetShareFilesAsync(Path.Combine(dirName, file.Name));
                    
                }

                Console.WriteLine("File:" + Path.Combine(dirName, file.Name));
            }


        }

    }
}

В соответствии с запросом добавление для Blob тоже.

static async Task GetBlobFiles()
{


    string blobstorageconnection = "DefaultEndpointsProtocol=https;AccountName=stomyuploadpublic;AccountKey=oSM1+BTK8cKbax6dxslT5Gm1aO9AjoH3oRTl43RkK6ZdcrLWB0FVAwoba1CopPycS0Ng3voVu6UR59UMK7ytsg==;EndpointSuffix=core.windows.net";
    string blobContainer = "public";

    CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(blobstorageconnection);

    // Create the blob client.
    CloudBlobClient blobClient = cloudStorageAccount.CreateCloudBlobClient();
    CloudBlobContainer container = blobClient.GetContainerReference(blobContainer);
    CloudBlobDirectory dirb = container.GetDirectoryReference(blobContainer);


    BlobResultSegment resultSegment = await container.ListBlobsSegmentedAsync(string.Empty, true, BlobListingDetails.Metadata, 500, null, null, null);

    foreach (var blobItem in resultSegment.Results)
    {
        var blob = (CloudBlob)blobItem;
        Console.WriteLine(blob.Name);

    }

}
person Daniel Björk    schedule 21.07.2020
comment
@Gaurav Mantri-AIS или Даниэль Бьорк: как мы можем проверить, существует ли файл с каким-либо именем в контейнере или нет - person Bad_Coder; 23.07.2020
comment
приведенный выше код для blob получает неправильное имя файла.. У меня есть файл в папке в контейнере.. имя файла идет как имя папки/имя файла... - person Bad_Coder; 23.07.2020
comment
@Madhu, это просто вывод, я объединил имя папки и имя файла, измените это, и все будет в порядке: Console.WriteLine(File: + Path.Combine(dirName, file.Name)); - person Daniel Björk; 23.07.2020
comment
я добавляю все имена файлов в список... но получаю неправильные имена файлов... нужно получить имя файла как abc.txt, но я получаю как имя папки/abc.txt.. прошу код большого двоичного объекта.. , не для общего доступа к файлам - person Bad_Coder; 23.07.2020
comment
@Madhu, я только что сказал тебе, как это изменить. Если вам нужно только имя файла, а не папка, вам следует просто добавить file.Name в свой список вместо Path.Combine(dirName, file.Name) - person Daniel Björk; 23.07.2020
comment
@Daiel Bjork - вы говорите о коде общего доступа к файлам ... но у меня проблема с кодом BLOB-объектов .. var blob = (CloudBlob)blobItem; Console.WriteLine(blob.Name); у меня возникает проблема здесь... В blob.Name это идет как flodername/filename - person Bad_Coder; 23.07.2020
comment
@Madhu ах, да, это потому, что в Blobstorage нет реальной концепции папок. Так называемая папка — это только часть названия. Вы можете попробовать Path.GetFileName(blob.Name); чтобы увидеть, работает ли это на этих строках. - person Daniel Björk; 23.07.2020
comment
@Daiel Bjork - есть ли возможность удалить файл в папке в контейнере, если файл существует с заданным именем ... для кода файлов больших двоичных объектов - person Bad_Coder; 23.07.2020
comment
@Madhu stackoverflow.com/questions /36497399/ - person Daniel Björk; 23.07.2020
comment
Я изменил свою учетную запись хранения для доступа из выбранных сетей и добавил IP-адрес своей виртуальной машины.. но все же, когда я запускаю свой код С#, я получаю сообщение об ошибке, говорящее, что этот запрос не авторизован для выполнения этой операции. - person Bad_Coder; 24.07.2020