You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SharpCompress解压含波浪号(~)文件报错:尝试写入目标目录外

解决SharpCompress解压含波浪号(~)文件的路径报错问题

这个报错是因为SharpCompress的路径安全校验会把带~的文件名误判为Windows短路径(比如C:\PROGRA~1这种格式),进而认为文件会被写到目标目录之外。既然手动替换~为_能解决,我们直接在代码里自动处理就行,不用改动原始压缩文件。

直接修改你的代码,替换掉WriteEntryToDirectory的调用逻辑,改成手动处理文件流和文件名:

public static void extractcompressedfiles_mk2(string Compressedfilepath, string extractPath)
{
    System.IO.Directory.CreateDirectory(extractPath);
    try
    {
        using (Stream stream = File.OpenRead(Compressedfilepath))
        using (var reader = ReaderFactory.Open(stream))
        {
            while (reader.MoveToNextEntry())
            {
                if (!reader.Entry.IsDirectory)
                {
                    // 替换Entry路径中的波浪号为下划线
                    string modifiedEntryKey = reader.Entry.Key.Replace('~', '_');
                    Console.WriteLine(modifiedEntryKey);
                    
                    // 构建目标文件的完整路径
                    string targetFilePath = Path.Combine(extractPath, modifiedEntryKey);
                    // 确保目标文件所在的父目录存在
                    string targetDir = Path.GetDirectoryName(targetFilePath);
                    if (!Directory.Exists(targetDir))
                    {
                        Directory.CreateDirectory(targetDir);
                    }
                    
                    // 手动读取压缩包内的文件流并写入目标文件
                    using (var entryStream = reader.Entry.OpenEntryStream())
                    using (var fileStream = File.OpenWrite(targetFilePath))
                    {
                        entryStream.CopyTo(fileStream);
                    }
                }
            }
        }
    }
    catch (Exception e)
    {
        Common.Globals.intExceptionErrors++;
        Logging.system.Error($"Extract Source Compressed Files: {e.Message}");
    }
}

关键改动说明:

  • 先把reader.Entry.Key里的~替换成_,避免触发SharpCompress的短路径误判逻辑
  • 手动构建目标文件路径,确保所有文件都严格落在extractPath目录范围内
  • 用OpenEntryStream()读取压缩内容,再写入到修改后的目标文件,绕开SharpCompress自带的路径校验

这样处理后,代码会自动处理含~的条目,不用再手动修改压缩文件,同时保持解压逻辑和原有需求一致。

内容的提问来源于stack exchange,提问作者Eugene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 06:05:57