2009-10-28 7 views
4

J'essaye d'écrire un journal d'erreur qui stockera toutes les erreurs dans un fichier .txt. Mais en ce moment, le problème auquel sont confrontés im est « Répertoire non trouvé Exception »Répertoire non trouvé d'exception

Ci-dessous est mon code pour ma méthode commune (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()); 
} 

}

Et voici comment j'appelle la writelog.

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

Veuillez déboguer/inspecter le chemin réellement utilisé. Vous verrez rapidement * pourquoi * l'exception est générée. –

Répondre

1

Votre path est un répertoire (string path = System.AppDomain.CurrentDomain.BaseDirectory.ToString()), mais vous l'utiliser comme File (File.Exists(path))?

Peut-être que vous devez définir path comme quelque chose comme ceci:

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

si Errorlog est votre nom de fichier (par exemple, "xys.txt")

1

chemin Construct fichier:

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

Il n'est pas très clair comment vous essayez d'utiliser les variables 'path' et 'Errorlog'. Il semble que vous essayez de créer un fichier en utilisant le chemin du répertoire.

Vous devez vous assurer que le chemin de base de votre fichier journal existe avant de créer le fichier. Est-ce proche de ce que vous cherchez?

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

Vous pouvez utiliser Filemon (http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx) pour inspecter ce qui se passe réellement sur le système de fil. De cette façon, vous pouvez voir quand votre programme essaie d'obtenir des poignées pour le système de fichiers et quels fichiers et répertoires votre programme veut.