开发者

windows application can not write to log.txt

This is main program.cs

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);

and this is LogError class

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)
            {
                //
            }
        }
    }

When i publish application and run it log.txt file is never created. If i run application from bin/debug folder then works. Why when i publish app logging not working. I am using win 2003 OS.


It could be an UnauthorizedAccessException.

Rather than guess at it you might want to change your catch to log to the event log rather than just swallowing it


File.AppendText only works if the file already exists: http://msdn.microsoft.com/en-us/library/system.io.file.appendtext.aspx. This link also has this sample 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");
    }   


you could use this code too, it works whether the file exits or not. As a plus it creates the log file based on the current DateTime in YYYYMMDD format

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();
    }


Your log-writing code is probably throwing an exception. Try removing the try/catch in WriteError to see what exception is being thrown.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜