列出目录下的文件和子目录
在 Prefix 和 Delimiter 结合的情况下,可以列出目录下的文件和子目录:
说明:
- 返回的结果中, ObjectSummaries 的列表中给出的是fun目录下的文件。
- 而 CommonPrefixs 的列表中给出的是fun目录下的所有子文件夹。可以看出 fun/movie/001.avi 和 fun/movie/007.avi 两个文件并没有被列出来,因为它们属于fun文件夹下的movie目录。
说明: 完整代码参考 GitHub。
说明: 完整代码参考 GitHub。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您提供的代码示例很好地展示了如何使用阿里云的Object Storage Service (OSS) SDK来管理存储空间(Bucket)中的文件和目录。这里我为您总结一下这些操作及其说明:
通过结合Prefix
和Delimiter
参数,您可以模拟在OSS中列出某个“目录”下的所有文件及子目录。注意,OSS是一个基于键-值对的对象存储服务,并没有传统意义上的文件系统目录结构,但可以通过对象键(Key)前缀来模拟目录。
using Aliyun.OSS;
public void ListObjects(string bucketName)
{
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
var listObjectsRequest = new ListObjectsRequest(bucketName)
{
Prefix = "fun/", // 指定前缀,模拟目录路径
Delimiter = "/" // 分隔符,用于区分文件和“目录”
};
var result = client.ListObjects(listObjectsRequest);
Console.WriteLine("List object succeeded");
Console.WriteLine("File:");
foreach (var summary in result.ObjectSummaries)
{
Console.WriteLine("Name:{0}", summary.Key);
}
Console.WriteLine("Dir:");
foreach (var prefix in result.CommonPrefixes)
{
Console.WriteLine("Name:{0}", prefix);
}
}
删除指定Bucket中的一个文件,需要提供Bucket名称和文件的Key(即对象的完整路径)。
public void DeleteObject(string bucketName, string key)
{
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
client.DeleteObject(bucketName, key);
Console.WriteLine("Delete object succeeded");
}
catch (Exception ex)
{
Console.WriteLine("Delete object failed. {0}", ex.Message);
}
}
如果您需要删除Bucket中的多个文件,可以先列举出所有要删除的文件的Key,然后一次性发送请求删除它们。
public void DeleteObjects(string bucketName)
{
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
var keys = new List<string>();
var listResult = client.ListObjects(bucketName);
foreach (var summary in listResult.ObjectSummaries)
{
keys.Add(summary.Key);
}
var request = new DeleteObjectsRequest(bucketName, keys, false);
client.DeleteObjects(request);
Console.WriteLine("Delete objects succeeded");
}
请注意,在实际应用中,您需要替换endpoint
、accessKeyId
和accessKeySecret
为您的阿里云账号对应的访问信息。此外,批量删除操作需谨慎执行,确保不会误删重要数据。