【发布时间】:2020-08-24 14:37:48
【问题描述】:
我已经编写了一些代码来使用 C# 将文件作为 .eml 文件的附件发送。
我在 Windows 临时文件夹中创建文件并将它们附加到 .eml 文件中。
.eml 文件只需使用 Windows 中的标准邮件程序打开并通过Process.Start(filename); 发送。如果用户希望再次发送文件,将从数据库中重写文件以确保其为最新版本。
现在我的问题:随机几次或仅在我第一次重写后文件出现错误
该进程无法访问该文件,因为它正被另一个进程使用
我确实在网上做了一些研究,发现了另一个question。
所以我确保像那里提到的那样,FileStream 的所有参数都正确设置。var fs = new FileStream(tempPathSave, FileMode.Open, FileAccess.Write, FileShare.ReadWrite)
有有人知道我的问题的原因是什么?我最大的问题是,当我这样做或那样做时,我无法真正复制它来说它正在发生。
编辑:我在 using 语句中使用 FileStream 以确保正确处理它。
【问题讨论】:
-
在您所指的问题中,FileStream 位于“使用”块内,因此可以正确处理。
-
电子邮件程序是否仍有可能访问该文件?
-
我在 using 语句中包含所有内容,以确保 FileStream 已关闭。我总是检查任务管理器,邮件程序已关闭。但我也可以让邮件程序打开几次,直到出现异常。有时它会在第一次之后直接出现。所以……我不知道。
-
好吧,一个解决方法是只使用另一个文件名......有时FS可能是一个b1tch。
-
我同意@Fildor 的概念。我会在临时文件夹中创建一个专用目录并使用唯一的文件名(guid)。我会定期进行清理 - 删除超过 2 小时的文件。
标签: c# filestream file-access