当应用程序中存在错误时,我正在尝试将一些信息写入文本文件。我将此代码添加到global.asax
中的Application_Error
方法中,但它仍然不起作用:
void Application_Error(object sender, EventArgs e)
{
string path = Server.MapPath("Error.txt");
Exception ex = Server.GetLastError();
if (!File.Exists(path))
{
File.Create(path);
}
if (File.Exists(path))
{
TextWriter tw = new StreamWriter(path, true);
tw.WriteLine("{0} : An Error Has Occurred, Error Description",DateTime.Now.ToString());
tw.WriteLine(@"{");
tw.WriteLine("Error Message: {0}", ex.Message);
tw.WriteLine("Source: {0}", ex.Source);
if (ex.StackTrace != null) tw.WriteLine("StackTrace: {0}", ex.StackTrace);
tw.WriteLine(@"}");
tw.Close();
}
}
如果重要的话,我也将重定向到错误页面时,这是Web.config文件:
<customErrors mode="On" defaultRedirect="ASPX/Error.aspx" redirectMode="ResponseRedirect">
<error statusCode="404" redirect="ASPX/Error404.aspx"/>
</customErrors>
那么,您是否知道我的代码有什么问题?如何使其写入文件中?
编辑:我只需要以管理员的身份运行VS,请解决probelm
代码的一个问题是,您没有using
块的CC_3块。问题在于此方法创建文件并返回流。当您尝试写入时,流很可能仍在锁定文件。
要解决此问题,您可以使用一个空的using
块,该块将关闭并处置流,例如:
if (!File.Exists(path))
{
using (File.Create(path)) { }
}
可能并不总是会尾声的相关问题是您没有处置TextWriter
。您还应该将使用该代码使用的代码包装在using
块中,以确保它得到照顾(并且您可以自动删除对.Close
的调用):
using (TextWriter tw = new StreamWriter(path, true))
{
tw.WriteLine("{0} : An Error Has Occurred, Error Description",
DateTime.Now.ToString());
tw.WriteLine(@"{");
tw.WriteLine("Error Message: {0}", ex.Message);
tw.WriteLine("Source: {0}", ex.Source);
if (ex.StackTrace != null) tw.WriteLine("StackTrace: {0}", ex.StackTrace);
tw.WriteLine(@"}");
}
您的问题可能是由于使用Server.MapPath
。
尝试更改:
string path = Server.MapPath("Error.txt");
类似:
string path = String.Format("{0}\{1}", HttpRuntime.AppDomainAppPath, "Error.txt");
我只需要以管理员的身份运行Visual Studio,不要浪费时间尝试添加更多答案注释,此问题已解决