2013-10-24 4 views
1

Мне нужна помощь. Я пытаюсь написать/создать файл журнала для регистрации ошибок нашего веб-приложения asp.net. Раньше мой код работал без проблем, но теперь я столкнулся с ошибкой «Процесс не может получить доступ к файлу, потому что он используется другим процессом», хотя я ничего не менял в своем коде. Но в любом случае мне нужно решить эту проблему. Пожалуйста помоги. Что случилось в моем коде? Благодарю.Не удается получить доступ к файлу ASP.NET и C#

 StreamWriter file; 
     if (logDetails.User.Length == 0) 
     { 
      logDetails.User = "Administrator"; 
     } 

     string fileName = Path.Combine(filePath, appFile) + "_" + logDetails.User + "_" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; 

     StringBuilder builder = new StringBuilder(); 
     builder = new StringBuilder(); 

     if (!File.Exists(fileName)) 
     { 
      file = new StreamWriter(fileName); 
      builder.AppendFormat("{0}\t\t\t{1}\t{2}\t{3}\t\t\t\t\t\t{4}\t\t\t\t{5}", "DATE", "PRIORITY", "SEVERITY", "MESSAGE", "EXCEPTION TYPE"); 
      builder.Append(Environment.NewLine); 
     } 
     else 
     { 
      file = File.AppendText(fileName); //**exception thrown here** 
     } 

     builder.Append(String.Format("{0}\t{1}\t\t{2}\t{3}\t{4}\t\t{5}", DateTime.Now.ToString(), logDetails.detail1, logDetails.detail2, logDetails.detail3+ logDetails.detail4, logDetails.detail5)); 

     builder.AppendLine(); 
     builder.Append(String.Format("STACKTRACE")); 
     builder.AppendLine(logDetails.StackTrace); 
     file.WriteLine(Convert.ToString(builder)); 
     file.Close(); 
+0

участвует ли многопоточность? Ваш код не будет работать, если он вызывается из разных потоков. Лучше держите дескриптор файла открытым в течение времени выполнения приложения yor. Также убедитесь, что ваше приложение работает только один раз. – PMF

ответ

2
StringBuilder builder = new StringBuilder(); 
if (!File.Exists(fileName)) 
{ 
    builder.AppendFormat("{0}\t\t\t{1}\t{2}\t{3}\t\t\t\t\t\t{4}\t\t\t\t{5}", "DATE", "PRIORITY", "SEVERITY", "MESSAGE", "EXCEPTION TYPE"); 
    builder.Append(Environment.NewLine); 
} 
builder.Append(String.Format("{0}\t{1}\t\t{2}\t{3}\t{4}\t\t{5}", DateTime.Now.ToString(), logDetails.detail1, logDetails.detail2, logDetails.detail3+ logDetails.detail4, logDetails.detail5)); 

builder.AppendLine(); 
builder.Append(String.Format("STACKTRACE")); 
builder.AppendLine(logDetails.StackTrace); 

using (StreamWriter sw = File.AppendText(path)) 
{ 
    sw.WriteLine(builder.ToString()); 
} 
+0

+1 для использования 'using' и убедитесь, что файл физически не открывается. –

+0

@ Damith благодарит много, ваш код работает отлично. благодаря – Moccassin

Смежные вопросы