2010-09-12 6 views
0

C'est Program.csWindows ne peut pas écrire à log.txt

principales
LogError.WriteError("Application started: " + DateTime.Now + Environment.NewLine); 
      try 
      { 
       Application.EnableVisualStyles(); 
       Application.SetCompatibleTextRenderingDefault(false); 
       Application.Run(new CrawlerApp()); 
      } 
      catch (Exception e) 
      { 
       LogError.WriteError(e); 
      } 
      LogError.WriteError("Application closed: " + DateTime.Now + Environment.NewLine); 

ce qui est classe LogError

public static class LogError 
    { 
     public static void WriteError(Exception e) 
     { 
      WriteError("Message: " + e.Message + Environment.NewLine + "Stack trace: " + e.StackTrace); 
     } 

     public static void WriteError(string error) 
     { 
      try 
      { 
       StreamWriter sw = File.AppendText("log.txt"); 
       sw.WriteLine(DateTime.Now + Environment.NewLine); 
       sw.WriteLine(error + Environment.NewLine); 
       sw.WriteLine(Environment.NewLine); 
       sw.Close(); 
      } 
      catch (Exception) 
      { 
       // 
      } 
     } 
    } 

Quand je publierai l'application et l'exécuter fichier log.txt est jamais créé. Si j'exécute l'application à partir du dossier bin/debug, cela fonctionne. Pourquoi lorsque je publie la journalisation de l'application ne fonctionne pas. J'utilise win 2003 OS. File.AppendText ne fonctionne que si le fichier existe déjà: http://msdn.microsoft.com/en-us/library/system.io.file.appendtext.aspx

+2

Supprimez le bloc Try Catch dans votre code de connexion pour voir quel est le problème. Le plus probable est que vous n'avez pas la permission d'écrire dans un fichier à cet endroit. –

Répondre

0

Ce lien a également cet exemple de code:

string path = @"c:\temp\MyTest.txt"; 
    // This text is added only once to the file. 
    if (!File.Exists(path)) 
    { 
     // Create a file to write to. 
     using (StreamWriter sw = File.CreateText(path)) 
     { 
      sw.WriteLine("Hello"); 
      sw.WriteLine("And"); 
      sw.WriteLine("Welcome"); 
     } 
    } 

    // This text is always added, making the file longer over time 
    // if it is not deleted. 
    using (StreamWriter sw = File.AppendText(path)) 
    { 
     sw.WriteLine("This"); 
     sw.WriteLine("is Extra"); 
     sw.WriteLine("Text"); 
    } 
+1

Du lien MSDN dans votre message - ... Si le fichier spécifié par chemin n'existe pas, il est créé .... –

+0

c'est pareil. Aucun fichier créé whern je cours l'application. – senzacionale

2

Il peut s'agir d'une exception UnauthorizedAccessException.

Plutôt que de deviner ce que vous voudrez peut-être changer vos prises pour se connecter au journal des événements plutôt que de simplement avaler

+0

+1: Battez-moi :-) –

+0

Et c'est probablement en essayant d'écrire dans 'Program Files' ... – leppie

+0

non j'essaye d'écrire dans c: \ LOG. J'ajoute eent journal écrit mais est le même. Aucun fichier créé et aucun journal :( – senzacionale

0

vous pouvez utiliser ce code aussi, il fonctionne si les sorties de fichiers ou non. En plus il crée le fichier journal sur la base du DateTime en format AAAAMMJJ

private static void doLog(String message) 
    { 
     //getting current date 
     String dateStr = ""; 
     int day, month, year; 
     year = System.DateTime.Now.Year; 
     month = System.DateTime.Now.Month; 
     day = System.DateTime.Now.Day; 
     dateStr += year.ToString() + ""; 
     if (month < 10) dateStr += "0"; 
     dateStr += month.ToString() + ""; 
     if (day < 10) dateStr += "0"; 
     dateStr += day.ToString() + ""; 

     //writting the message 
     string logFile = Environment.CurrentDirectory + @"/LOG_" + dateStr + @".txt"; 
     System.IO.StreamWriter sw = new System.IO.StreamWriter(logFile, true); 
     sw.WriteLine(System.DateTime.Now.ToString() + "\t" + message); 
     sw.Close(); 
    } 
+0

Environment.CurrentDirectory n'est pas toujours accessible en écriture. –

0

Votre code journal d'écriture est probablement lancer une exception. Essayez de supprimer le try/catch dans WriteError pour voir quelle exception est levée.

Questions connexes