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

ZipArchive Framework 6使用临时文件名引发异常问题求助

临时文件压缩异常问题解决

使用Path.GetTempFileName()生成临时文件名执行压缩操作时会抛出异常,但改用静态文件名则无异常。

相关代码如下:

tmp0 = Path.GetTempFileName();
WriteSomeDataToFileAndClose(tmp0);

tmp1 = Path.GetTempFileName();

using (var fileStream = new FileStream(tmp1, FileMode.CreateNew))
{
    using (ZipArchive zip2 = new ZipArchive(fileStream, ZipArchiveMode.Create))
    {
        zip2.CreateEntryFromFile(tmp0, Path.GetFileNameWithoutExtension(tmp0), CompressionLevel.Fastest);
    }
}

抛出的异常信息翻译为:

System.Windows.Markup.XamlParseException: 调用类型的构造函数时发生异常。

问题根源

Path.GetTempFileName()会在系统临时目录创建一个已存在的空文件,而FileStream的FileMode.CreateNew模式要求目标文件必须不存在,否则会触发底层文件操作异常,最终导致上层抛出XamlParseException。

解决方案

  1. 修改文件打开模式
    将FileMode.CreateNew替换为FileMode.Create,后者会自动覆盖已存在的文件:
using (var fileStream = new FileStream(tmp1, FileMode.Create))
  1. 生成不存在的临时文件路径
    不要用Path.GetTempFileName()生成压缩目标文件路径,改用临时目录结合随机文件名生成不存在的文件:
tmp1 = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".zip");

这样后续使用FileMode.CreateNew就不会触发文件已存在的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 23:07:21