如何用C#获取指定目录文件的完整路径以用于Zip压缩操作?
解决路径拼接与压缩文件创建的问题
原代码存在的问题
- 变量名大小写不一致:
filelist和fileList拼写差异会导致编译错误 - 代码逻辑错误:
fullPathName定义在foreach循环外部,无法访问循环内的file变量 - 路径拼接方式不安全:直接用
+拼接路径,若原路径末尾没有斜杠,会生成错误路径(比如C:\Desktop\Testingabc.txt)
正确实现方式
方式一:利用Directory.GetFiles返回的完整路径
Directory.GetFiles(path)本身就会返回每个文件的完整路径,我们只需要从中提取文件名作为压缩条目名称即可:
string path = @"C:\Desktop\Testing"; string[] fileList = Directory.GetFiles(path); foreach (string fullPathName in fileList) { // 获取不带路径的纯文件名 string fileName = Path.GetFileName(fullPathName); // 调用创建压缩条目的方法 addfile.CreateEntryFromFile(fullPathName, fileName); }
方式二:手动安全拼接路径(适用于仅获取文件名列表的场景)
如果需要单独获取文件名再拼接路径,推荐使用Path.Combine方法,它会自动处理路径分隔符的问题:
string path = @"C:\Desktop\Testing"; // 获取目录下所有文件的纯文件名 string[] fileNames = Directory.EnumerateFiles(path) .Select(filePath => Path.GetFileName(filePath)) .ToArray(); foreach (string fileName in fileNames) { // 安全拼接完整路径 string fullPathName = Path.Combine(path, fileName); addfile.CreateEntryFromFile(fullPathName, fileName); }
关键说明
Path.Combine是C#中处理路径拼接的标准方法,能自动适配不同系统的路径分隔符,避免手动拼接导致的格式错误Path.GetFileName用于从完整路径中提取纯文件名,正好匹配CreateEntryFromFile方法对第二个参数(压缩条目名称)的需求
内容的提问来源于stack exchange,提问作者Cheri Choc
相关产品推荐
相关产品推荐

