如何删除Azure文件存储文件夹中的所有文件?

BG1*_*100 7 c# azure azure-storage delete-file azure-storage-files

我正在尝试如何删除Azure文件存储中的文件夹中的所有文件.

CloudFileDirectory.ListFilesAndDirectories()返回IEnumerableIListFileItem.但这没有多大帮助,因为它没有文件名属性或类似功能.

这是我到目前为止:

var folder = root.GetDirectoryReference("myfolder");

if (folder.Exists()) {
    foreach (var file in folder.ListFilesAndDirectories()) {

        // How do I delete 'file'

    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能改变一个IListFileItemCloudFile,所以我可以打电话myfile.Delete()

Emi*_*ner 14

ListFilesAndDirectories可以返回文件和目录,以便为这两个文件获取基类.然后你可以检查它是什么类型和铸造.请注意,您将要跟踪任何子目录,以便递归删除其中的文件.

var folder = root.GetDirectoryReference("myfolder");

if (folder.Exists())
{
    foreach (var item in folder.ListFilesAndDirectories())
    {         
        if (item.GetType() == typeof(CloudFile))
        {
            CloudFile file = (CloudFile)item;

            // Do whatever
        }

        else if (item.GetType() == typeof(CloudFileDirectory))
        {
            CloudFileDirectory dir = (CloudFileDirectory)item;

            // Do whatever
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Bra*_*ton 6

采用现有答案,修复了一些错误并创建了一个扩展方法来递归删除目录

public static async Task DeleteAllAsync(this ShareDirectoryClient dirClient) {

    await foreach (ShareFileItem item in dirClient.GetFilesAndDirectoriesAsync()) {
        if (item.IsDirectory) {
            var subDir = dirClient.GetSubdirectoryClient(item.Name);
            await subDir.DeleteAllAsync();
        } else {
            await dirClient.DeleteFileAsync(item.Name);
        }
    }

    await dirClient.DeleteAsync();
}
Run Code Online (Sandbox Code Playgroud)

称呼它为

var dirClient = shareClient.GetDirectoryClient("test");
await dirClient.DeleteAllAsync();
Run Code Online (Sandbox Code Playgroud)