【发布时间】:2014-05-26 20:03:35
【问题描述】:
我在覆盖文件时遇到错误。如果它仍在工作,则无法找到关闭文件的方法。有人能帮助我吗 ?
if (System.IO.File.Exists(Server.MapPath("/html/" + htmlname)))
{
System.IO.File.Delete(Server.MapPath("/html/" + htmlname));
System.IO.File.WriteAllText(Server.MapPath("/html/" + htmlname), mailbody);
}
else
{
System.IO.File.WriteAllText(Server.MapPath("/html/" + htmlname), mailbody);
}
【问题讨论】:
-
根据我的经验,静态文件 IO 方法不适合处理文件句柄。我会改为使用 FileStream 并自己管理资源;你可能会踩到自己的脚。
-
@Jeff 你/我们会比 WriteAllText() 更好或不同地实现文件写入吗?
-
@Seration 您应该首先找到您写入该文件的所有位置。你错过了 Close()/Dispose() 吗?有什么异步的吗?如果没有更多上下文,您只会收到 10.000 条建议(如果您全部检查它们,您可能甚至会选择正确的...)
-
@Adriano 问题出在我写“文件”的时候。没有 close() 或 dispose() 选项。所以我真的不知道错过了什么
-
如果您使用该静态方法编写,则无需关闭它(他们会这样做)。当你有一个流时,你必须关闭它(例如来自 File.Open)。您已经检查是否也以异步方式使用它(例如,您在不同的线程或多个请求中写入和读取)。这些只是(少数)一般情况,但如果没有更多信息(那个文件是什么?你在哪里写的?你在哪里读的?它是否被其他东西共享?
标签: c# asp.net io delete-file overwrite