当我在应用程序中出现错误时,我正在尝试将一些信息写入文本文件。我将此代码添加到Application_Error
中的global.asax
方法中,但它仍然无效:
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,问题就解决了
答案 0 :(得分:1)
您的代码存在的一个问题是您的app.config(function(RestangularProvider,
$injector,
AuthHandlerProvider,
TokenHandlerProvider) {
var AuthHandler = $injector.instantiate(AuthHandlerProvider.$get);
var TokenHandler = $injector.instantiate(TokenHandlerProvider.$get);
//...
});
电话没有using
阻止。问题是此方法创建一个文件并返回一个流。当您尝试写入文件时,流很可能仍会锁定文件。
要解决此问题,您可以使用一个空的File.Create
块来关闭和处理流,如下所示:
using
一个相关的问题可能并不总是让人头疼,因为你没有处置if (!File.Exists(path))
{
using (File.Create(path)) { }
}
。您还应该在TextWriter
块中包含使用该代码的代码,以确保它得到处理(并且您可以删除对using
的调用,因为这将自动发生):
.Close
答案 1 :(得分:0)
您的问题可能是由于使用了Server.MapPath
。
尝试更改:
string path = Server.MapPath("Error.txt");
类似于:
string path = String.Format("{0}\\{1}", HttpRuntime.AppDomainAppPath, "Error.txt");
答案 2 :(得分:-2)
我只是以管理员身份运行visual studio,不要浪费时间尝试添加更多答案\评论,这个问题就解决了