如何解决无法重写文件,因为其他进程正在使用该文件
我编写了一些代码,以使用C#将文件作为.eml文件的附件发送。
我在Windows临时文件夹中创建文件,并将它们附加到.eml文件。
只需打开.eml文件,并使用Windows中的标准邮件程序通过Process.Start(filename);
发送。如果用户希望再次发送文件,则会从数据库中重写该文件以确保其为最新版本。
现在,我的问题是:随机几次或仅在第一次之后重写出现错误的文件
该进程无法访问该文件,因为该文件正在被另一个进程使用
我严格地在网络上进行了一些研究,发现了另外question。
所以我确保像那里提到的那样,使用所有参数正确设置了FileStream。
{{1 }}
是否有人知道我的问题的原因是什么?我最大的问题是,我无法真正复制它来表示它是在执行此操作时发生的。
编辑:我在using语句中使用FileStream以确保其正确处理。
解决方法
在没有实际看到代码的情况下很难正确地理解问题所在,但是根据我的经验,您没有正确地处理文件流对象,因此它无法处理文件
var fs = new FileStream(tempPathSave,FileMode.Open,FileAccess.Write,FileShare.ReadWrite)
因此,当您完成文件流的使用后,请致电
fs.Dispose();
这将正确处理文件流。
此外,您可以使用合成糖using
,它会自动处理您的对象
using(var fs = new FileStream(tempPathSave,FileShare.ReadWrite)){
// use fs here
// STUFF
} //at the end fs will be disposed
,
我为我的问题找到了解决方案。我刚刚将FileStream更改为MemoryStream,因为MailMessage构造函数也可以处理流。唯一的要点是,必须保持MemoryStream打开,直到保存.eml文件。而且更重要的是,您必须注意内存使用情况,并确保随后将释放每个MemoryStream。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。