2009-10-28 4 views
4

Я пытаюсь написать журнал ошибок, в котором будут храниться все ошибки в файле .txt. Но сейчас проблема им облицовочный является «каталог не найден исключение»Directory not found exception

Ниже мой код для моего общего метода (WriteLog)

using System; 
using System.Data; 
using System.Configuration; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Text; 
using System.IO; 
using System.Diagnostics; 

/// <summary> 
/// Summary description for Writelog 
/// </summary> 
/// <param name="ErrorDesc">Desc</param> 
/// <param name="ID">ID</param> 
/// <param name="ProgPage">Name</param> 
/// <param name="Message">Error Message</param> 
public class Writelog 
{ 
    public static void WritelogDesc(string Desc, string ID, string Name, string ErrorMessage) 
    { 
     StringBuilder sBuilder = new StringBuilder(); 

    string Errorlog = System.Configuration.ConfigurationManager.AppSettings["Errorlog"]; 

    string path = System.AppDomain.CurrentDomain.BaseDirectory.ToString(); 

    sBuilder.Append(DateTime.Now.ToString("dd/MM/yyyy") + " " + DateTime.Now.ToShortTimeString()); 
    sBuilder.Append(" | "); 
    sBuilder.Append(Desc); 
    sBuilder.Append(" | "); 
    sBuilder.Append(ID); 
    sBuilder.Append(" | "); 
    sBuilder.Append(Name); 
    sBuilder.Append(" | "); 
    sBuilder.Append(ErrorMessage); 

    StreamWriter sw = (!File.Exists(path)) ? File.CreateText(path) : File.AppendText(path); 
    sw.WriteLine(sBuilder.ToString()); 
} 

}

А вот как я называю WriteLog.

Writelog.WritelogDesc("Desc", "ID", "Name", "ErrorMessage"); 
+1

Пожалуйста, отлаживайте/проверяйте используемый путь. Вы быстро увидите * почему * генерируется исключение. – 2009-10-28 02:35:51

ответ

1

Ваш path является каталогом (string path = System.AppDomain.CurrentDomain.BaseDirectory.ToString()), но использовать его в качестве File (File.Exists(path))?

Может быть, вы должны определить path как что-то вроде этого:

string path = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, Errorlog) 

если Errorlog ваше имя файла (например, "xys.txt")

1

Construct путь к файлу:

string Errorlog=System.Configuration.ConfigurationManager.AppSettings["Errorlog"]; 
string path = System.AppDomain.CurrentDomain.BaseDirectory + Errorlog; 
....... 
....... 
StreamWriter sw = (!File.Exists(path)) ? 
     File.CreateText(path) : File.AppendText(path); 

sw.WriteLine(sBuilder.ToString()); 
7

Не совсем понятно, как вы пытаетесь использовать переменные «путь» и «ошибка». Похоже, вы пытаетесь создать файл, используя путь к каталогу.

Перед созданием файла необходимо убедиться, что базовый путь для вашего файла журнала существует. Это близко к тому, что вы ищете?

Directory.CreateDirectory(path); 
String logfile = Path.Combine(path, Errorlog); 
StreamWriter sw = new StreamWriter(logfile, true); 
0

Вы можете использовать FileMon (http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx), чтобы проверить, что на самом деле происходит в системе фил.

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