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

.NET 6下临时PDF文件打开后自动删除及程序独占访问问题

.NET 6实现临时文件打开后自动删除及独占访问控制

一、关于PDF扩展名的合理性

如果你的二进制码本身就是PDF格式的字节流,用.pdf扩展名完全没问题,系统会调用默认PDF阅读器打开;如果二进制码对应其他格式(比如Word、图片),必须改成对应扩展名,否则关联程序无法正确识别内容。

二、实现打开后自动删除

核心思路是:启动外部程序打开临时文件后,等待该程序进程退出,再执行删除操作。同时要处理进程启动失败、异常退出等情况,避免文件残留。

修改后的完整代码示例:

string binaryCode = ".....";
string tempName = Guid.NewGuid().ToString();
string fileLocation = Path.Combine(Path.GetTempPath(), tempName + ".pdf");

// 二进制转字节数组(保留原有逻辑)
int numOfBytes = binaryCode.Length / 8;
byte[] bytes = new byte[numOfBytes];
for (int i = 0; i < numOfBytes; ++i)
{
    bytes[i] = Convert.ToByte(binaryCode.Substring(8 * i, 8), 2);
}

// 写入文件时设置独占访问,禁止其他进程读写
using (var fs = new FileStream(fileLocation, FileMode.Create, FileAccess.Write, FileShare.None))
{
    fs.Write(bytes, 0, bytes.Length);
}

try
{
    // 启动默认程序打开文件
    var processStartInfo = new ProcessStartInfo(fileLocation)
    {
        UseShellExecute = true,
        Verb = "open"
    };
    var process = Process.Start(processStartInfo);
    
    if (process != null)
    {
        // 等待进程退出
        process.WaitForExit();
        // 删除临时文件
        File.Delete(fileLocation);
    }
}
catch (Exception ex)
{
    // 异常场景下尝试删除文件,避免残留
    if (File.Exists(fileLocation))
    {
        File.Delete(fileLocation);
    }
    // 可根据需求添加日志记录或异常抛出逻辑
    // throw ex;
}

三、实现文件仅允许程序访问的补充说明

  • 写入文件时使用FileShare.None,确保只有当前进程能读写该文件,其他进程无法打开或修改;
  • 全程由程序控制文件的创建、打开和删除流程,不要将临时文件路径暴露给外部,避免用户手动访问;
  • 可在系统临时目录下创建专属子文件夹存放临时文件,进一步降低被手动访问的概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:10:28