.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
相关产品推荐
相关产品推荐

