【发布时间】:2018-08-07 23:23:59
【问题描述】:
为什么,这段代码执行后,我不能手动删除生成的文件?我收到此错误消息:
The action can't be completed because the file is open in IIS Express Workers Process.
代码:
System.IO.File.AppendAllText("Filename.txt", "Some Text");
该应用程序是一个 Web 应用程序并在 IIS 中运行。我的理解是AppendAllText自动关闭文件句柄。
我没有使用此代码进行登录。代码的目的是创建一个 CSV 文件,然后将其附加到电子邮件中。如果我执行代码并通过电子邮件发送文件,则永远不会发送文件。如果我然后重新启动 IIS(以释放锁定)并仅执行代码以邮寄文件(不生成),它可以工作。
附加文件的代码...
SmtpClient mailClient = new SmtpClient();
MailMessage msg = new MailMessage();
... Add From, Subject, Body, etc... here
msg.Attachments.Add(new Attachment(filename));
mailClient.Send(msg);
不会引发异常,不会将任何内容写入日志文件以指示问题。电子邮件根本没有发送,如果我转到生成的文件并尝试删除它,我不能因为 IIS 将其锁定。我相信锁定是电子邮件永远不会发送的原因。
【问题讨论】:
-
你能在你得到文本的地方显示整个代码,附加这个文本并删除这个文件吗?
-
以防万一您打算使用
AppendAllText实际记录消息 - 不要。 -
AppendAllText只会在写入文件时锁定文件。但是,在 Web 应用程序中,可能会随时写入 很多 个请求。这就是为什么创建日志库不容易的原因。 -
您是否同时访问该文件?
-
有很多优秀的日志库可以处理并发日志记录、滚动文件、删除和保留。使用其中之一,例如 Serilog、NLog 或 log4net
标签: c#