如何在C#中列出S3存储桶指定目录文件且不包含子目录文件
解决S3存储桶指定目录下仅列出直接文件(不含子目录文件)的问题
要实现仅获取指定目录下的直接文件(排除子目录中的文件),需要利用S3 API的Delimiter参数,并优化前缀处理,具体修改如下:
修改后的代码
public async Task<List<string>> ListarArchivos(string subDirectory) { List<string> archivos = new List<string>(); // 确保前缀以"/"结尾,避免误匹配类似"exampleabc/"的路径 string targetPrefix = subDirectory.EndsWith("/") ? subDirectory : $"{subDirectory}/"; ListObjectsV2Request request = new ListObjectsV2Request { BucketName = bucket, Prefix = targetPrefix, Delimiter = "/", // 核心配置:分隔子目录与直接文件 MaxKeys = 100 }; ListObjectsV2Response response; do { response = await _clienteAmazonS3.ListObjectsV2Async(request); foreach (S3Object entry in response.S3Objects) { // 过滤空文件(保留原逻辑) if (entry.Size > 0) { archivos.Add(entry.Key); } } request.ContinuationToken = response.NextContinuationToken; } while (response.IsTruncated); return archivos; }
关键修改说明
添加
Delimiter = "/"
设置分隔符后,S3会将Prefix路径下的直接文件和子目录分开:直接文件会出现在response.S3Objects中,子目录则被归类到response.CommonPrefixes里,不会混入文件列表。统一前缀格式
确保传入的subDirectory以"/"结尾,避免出现类似传入"example"时,误匹配"example1.sql"这类不符合预期的键。
内容的提问来源于stack exchange,提问作者void.cpp
相关产品推荐
相关产品推荐

