我正在开发一个C#应用程序,它创建一个包含一些数据的文本文件,将其保存在一个文件夹中,将其发送到电子邮件地址列表并从该位置删除该文件但是当我调用File.Delete时()它抛出一个异常,说文件无法被访问,因为它被另一个进程使用。那是因为该文件正被电子邮件服务使用并试图删除所以,这是一个明显的例外但是当我尝试在两个函数调用之间的延迟时,它仍然让我异常
_dailyBargainReport.sendRejectionReport(servername, fromAddress, password, sub, bodyofmail, rejectionReportPath);
Task.Delay(20000);
File.Delete(rejectionReportPath);
答案 0 :(得分:1)
我认为您的问题是您没有在Dispose
上调用FileStream
方法
using (FileStream f = File.Open("example.txt", FileMode.Open, FileAccess.Read, FileShare.None))
{
//do your operations
}
File.Delete(rejectionReportPath);
使用statment始终调用Dispose
,因此等同于
try{
FileStream f = File.Open("example.txt", FileMode.Open, FileAccess.Read, FileShare.None);
}
finally{
((IDisposable)f).Dispose();
}
//delete file here
<强>更新强>
尝试以这种方式等待功能
Task.Factory.StartNew(() =>
{
_dailyBargainReport.sendRejectionReport(servername, fromAddress, password, sub, bodyofmail, rejectionReportPath);
})
.ContinueWith(() =>
{
File.Delete(rejectionReportPath);
}).Wait();
通过这种方式,您可以确保在Delete
结束后调用sendRejectionReport
函数
记住在Dispose
函数
sendRejectionReport
答案 1 :(得分:0)
创建文件时,您可以使用要在进程关闭时删除的标志创建该文件。请参阅:https://stackoverflow.com/a/400433/3846861