为什么它不在异常中写入文件

本文关键字:文件 异常 为什么 | 更新日期: 2023-09-27 18:08:18

仍有问题

我有下面的代码。只要我在try{}中,它就写得很好。但是当出现错误时,它不会写入日志文件。不知道为什么

 private static void jk(string kName, string path)
        {
            Job job;

            try
            {
             // run some functions here and then write to the file
               StreamWriter LJ = new StreamWriter("C:''Lob.txt");
            LJ.WriteLine("XXXXXXXXXXXX");
            LJ.Close();   
            }
            catch (InvalidException)
            {
               StreamWriter LJ = new StreamWriter("C:''Lob.txt");
                LJ.WriteLine("YYYYYYYYYYYYYYYY");
                LJ.Close();
                Console.WriteLine("Error: ");
                return;
            }

        }

为什么它不在异常中写入文件

因为在你的尝试中唯一的事情是写入流…这和你在缓存中要做的是一样的。为什么会这样呢?

catch块只在try块抛出异常时执行(这似乎是原始帖子中的错别字)。

如果try成功,则catch不执行。

如果try失败,那一定是因为在写入日志时发生了问题。当catch执行时,这个问题很可能仍然存在,因此catch中的日志也将失败。

嗯,我不知道LJ是什么类型,我当然从来没有听说过IncalidException。我假定您只是在编辑器中输入了错误的代码。你应该直接粘贴进来,以避免这些类型的错误。

无论如何,这里有几个选项:

  1. LJ.WriteLine没有抛出异常
  2. LJ.WriteLine抛出异常,但不是你正在捕获的类型(即,当你只是catch { }时,看看它是否有效)。
  3. 第二次调用LJ.WriteLine也抛出一个异常,你正在捕捉(也许吞下)它进一步向上的堆栈。

与您的评论:

尝试失败,因为一些其他问题,但我正试图记录它放入文件

我假设异常不是由LJ.WriteLine("XXXXXXXXXXXX");

抛出的

如果是这种情况,您可能只需要刷新StreamWriter。尝试在using块中声明LJ:

using (StreamWriter LJ = new StreamWriter("C:''Lob.txt"))
{
    LJ.WriteLine("XXXXXXXXXXXX");
    try
    {
        ...
        LJ.WriteLine("XXXXXXXXXXXX");
    }
    catch (InvalidException)
    {
        LJ.WriteLine("YYYYYYYYYYYYYYYY");
        Console.WriteLine("Error: ");
        return;
    }
}

你能编译这段代码吗?

我认为上面有两件事不正确。

  1. 应该是invalideception而不是IncalidException

        try
        {
            LJ.WriteLine("XXXXXXXXXXXX");
        }
        catch (InvalidException e)
        {
            LJ.WriteLine("YYYYYYYYYYYYYYYY");
            Console.WriteLine("Error: {0}", e.Message);
            return;
        }