我正在尝试将文本写入.txt文件,但它不起作用



当应用程序中存在错误时,我正在尝试将一些信息写入文本文件。我将此代码添加到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,不要浪费时间尝试添加更多答案注释,此问题已解决

相关内容

  • 没有找到相关文章

最新更新