Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在邮件附件中发送后,无法访问要写入的文件_C#_Console Application - Fatal编程技术网

C# 在邮件附件中发送后,无法访问要写入的文件

C# 在邮件附件中发送后,无法访问要写入的文件,c#,console-application,C#,Console Application,我有一个C#console应用程序,它使用下面的代码将正在执行的步骤写入日志文本文件 logFilePath = logFilePath + "Log-" + System.DateTime.Today.ToString("dd-MM-yyyy") + "." + "txt"; logFileInfo = new FileInfo(logFilePath); logDirInfo = new DirectoryInf

我有一个
C#console应用程序
,它使用下面的代码将正在执行的步骤写入日志文本文件

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:进程无法访问文件“文件路径”,因为它正由用户使用另一个过程

我尝试过文件共享选项,但其他事情都没有成功

在下面的代码中引发异常

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使用的注释,尝试了以下代码,但仍然存在相同的异常

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("---------------------------------------------------------------");
    }
  }

请帮助而不是
处理
SmtpClient
我在发送邮件后释放了邮件的附件

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;

它成功了

试着处理
文件流
。这能回答你的问题吗@Sinatr我曾尝试过该问题中提到的文件共享,但没有成功,在访问文件以附加某些行时不会引发异常使用日志库,而不是尝试构建自己的日志库。像Serilog和NLog这样的库已经解决了这些问题。您的代码在
using
块中没有按应有的方式处理流和writer对象,因此任何错误都会使文件保持打开状态。也不需要进行存在性检查,如果文件不存在,将创建该文件并打开StreamWriter
DirectoryInfo.Create
如果文件夹已经存在,则不会执行任何操作。事实上,您可以使用或替换几乎所有的代码