在邮件附件中发送后无法访问要写入的文件
Cannot access the File to write after sending it in Mail attachment
我有 C# console application
使用下面的代码在日志文本文件中写入它正在执行的步骤
logFilePath = logFilePath + "Log-" + System.DateTime.Today.ToString("dd-MM-yyyy") + "." + "txt";
logFileInfo = new FileInfo(logFilePath);
logDirInfo = new DirectoryInfo(logFileInfo.DirectoryName);
if (!logDirInfo.Exists) logDirInfo.Create();
if (!logFileInfo.Exists)
{
fileStream = logFileInfo.Create();
}
else
{
fileStream = new FileStream(logFilePath,FileMode.Append);
}
log = new StreamWriter(fileStream);
log.WriteLine("---------------" + DateTime.Now.ToString() + "--------------------------");
log.WriteLine(strLog);
log.WriteLine("---------------------------------------------------------------");
log.Close();
它工作正常,但是当发生异常时,我会将日志文本文件附加到邮件中,然后当我尝试再次调用方法时发送它,该方法在邮件与日志文本文件之后写入同一个日志文本文件附件 我得到异常 IOException: 进程无法访问文件 'file path' 因为它正被另一个进程使用
我试过 FileShare Option 和其他东西都没有成功
以下代码抛出异常
client.Send(mail);
client.Dispose();
LogWriter.WriteLog("######--Re-Start of the Process at -" + Convert.ToString(DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss")) + "--######"); //Exception thrown here
Console.WriteLine("######--Re-Start of the Process at -" + Convert.ToString(DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss")) + "--######");
BridgePage.GetData();
Console.WriteLine("######--Re-End of the Process at -" + Convert.ToString(DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss")) + "--######");
LogWriter.WriteLog("######--Re-End of the Process at -" + Convert.ToString(DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss")) + "--######");
根据 Panagiotis Kanavos 使用 FileInfo.AppendText 的评论,尝试了以下代码,但仍然存在相同的异常
logFilePath = logFilePath + "Log-" + System.DateTime.Today.ToString("dd-MM-yyyy") + "." + "txt";
logFileInfo = new FileInfo(logFilePath);
if (!logFileInfo.Exists)
{
//Create a file to write to.
using (StreamWriter logsw = logFileInfo.CreateText())
{
logsw.WriteLine("---------------" + DateTime.Now.ToString() + "--------------------------");
logsw.WriteLine(strLog);
logsw.WriteLine("---------------------------------------------------------------");
}
}
else
{
using (StreamWriter logsw = logFileInfo.AppendText())
{
logsw.WriteLine("---------------" + DateTime.Now.ToString() + "--------------------------");
logsw.WriteLine(strLog);
logsw.WriteLine("---------------------------------------------------------------");
}
}
请帮忙
而不是 Disposing
SmtpClient
我在发送邮件后释放了 MailMessage.Attachments 的附件
if (mail.Attachments != null)
{
for (int i = mail.Attachments.Count - 1; i >= 0; i--)
{
mail.Attachments[i].Dispose();
}
mail.Attachments.Clear();
mail.Attachments.Dispose();
}
mail.Dispose();
mail = null;
成功了
我有 C# console application
使用下面的代码在日志文本文件中写入它正在执行的步骤
logFilePath = logFilePath + "Log-" + System.DateTime.Today.ToString("dd-MM-yyyy") + "." + "txt";
logFileInfo = new FileInfo(logFilePath);
logDirInfo = new DirectoryInfo(logFileInfo.DirectoryName);
if (!logDirInfo.Exists) logDirInfo.Create();
if (!logFileInfo.Exists)
{
fileStream = logFileInfo.Create();
}
else
{
fileStream = new FileStream(logFilePath,FileMode.Append);
}
log = new StreamWriter(fileStream);
log.WriteLine("---------------" + DateTime.Now.ToString() + "--------------------------");
log.WriteLine(strLog);
log.WriteLine("---------------------------------------------------------------");
log.Close();
它工作正常,但是当发生异常时,我会将日志文本文件附加到邮件中,然后当我尝试再次调用方法时发送它,该方法在邮件与日志文本文件之后写入同一个日志文本文件附件 我得到异常 IOException: 进程无法访问文件 'file path' 因为它正被另一个进程使用
我试过 FileShare Option 和其他东西都没有成功
以下代码抛出异常
client.Send(mail);
client.Dispose();
LogWriter.WriteLog("######--Re-Start of the Process at -" + Convert.ToString(DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss")) + "--######"); //Exception thrown here
Console.WriteLine("######--Re-Start of the Process at -" + Convert.ToString(DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss")) + "--######");
BridgePage.GetData();
Console.WriteLine("######--Re-End of the Process at -" + Convert.ToString(DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss")) + "--######");
LogWriter.WriteLog("######--Re-End of the Process at -" + Convert.ToString(DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss")) + "--######");
根据 Panagiotis Kanavos 使用 FileInfo.AppendText 的评论,尝试了以下代码,但仍然存在相同的异常
logFilePath = logFilePath + "Log-" + System.DateTime.Today.ToString("dd-MM-yyyy") + "." + "txt";
logFileInfo = new FileInfo(logFilePath);
if (!logFileInfo.Exists)
{
//Create a file to write to.
using (StreamWriter logsw = logFileInfo.CreateText())
{
logsw.WriteLine("---------------" + DateTime.Now.ToString() + "--------------------------");
logsw.WriteLine(strLog);
logsw.WriteLine("---------------------------------------------------------------");
}
}
else
{
using (StreamWriter logsw = logFileInfo.AppendText())
{
logsw.WriteLine("---------------" + DateTime.Now.ToString() + "--------------------------");
logsw.WriteLine(strLog);
logsw.WriteLine("---------------------------------------------------------------");
}
}
请帮忙
而不是 Disposing
SmtpClient
我在发送邮件后释放了 MailMessage.Attachments 的附件
if (mail.Attachments != null)
{
for (int i = mail.Attachments.Count - 1; i >= 0; i--)
{
mail.Attachments[i].Dispose();
}
mail.Attachments.Clear();
mail.Attachments.Dispose();
}
mail.Dispose();
mail = null;
成功了