控制台写入文件问题

克雷伯塔

这是我写在文件中的功能:

FileStream file = new FileStream ("c:/Redirect.txt", FileMode.OpenOrCreate, FileAccess.Write);
public void writeFile(string line, FileStream file) 
{
    StreamWriter writer;
    TextWriter oldOut = Console.Out;
    try
    {
        writer = new StreamWriter(file);
    }
    catch (Exception e)
    {
        Console.WriteLine("Cannot open Redirect.txt for writing");
        Console.WriteLine(e.Message);
        return;
    }
    Console.SetOut(writer);
    Console.WriteLine(line);
    Console.SetOut(oldOut);
    writer.Close();
    file.Close();
    Console.WriteLine("Done");
}

这就是我的用法:

writeFile("********* Clienta *********",file);
writeFile("Centre   ***  " + id,file);

但是当我运行我的代码时,我得到了这个错误:

Cannot open Redirect.txt for writing
The stream can not be written.

我的代码有什么问题?

豆类

您的问题是您两次关闭文件流。第一次调用完成后,您已经关闭了文件,因此当您第二次调用时,它将尝试在关闭的文件流上创建一个流写入器。

删除file.Close并将您的参数类型更改为StreamWriter在函数外创建流写入器,然后在完成文件写入后将其关闭。

尝试这样的事情:

    public void WriteFile(string line, string fileName)
    {
        try
        {
            using (var sw = new StreamWriter(fileName, true))
            {
                sw.WriteLine(line);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Cannot open Redirect.txt for writing");
            Console.WriteLine(e.Message);
            return;
        }

        Console.WriteLine("Done");
    }

现在,不要将文件流传递给函数,而要传递C:/Redirect.txt

WriteFile("********* Clienta *********","C:/Redirect.txt");
WriteFile("Centre   ***  " + id, "C:/Redirect.txt");

我会指出:这是次优的对于此函数的每次调用,打开和关闭文件的效率都非常低。更好的方法是使用一个对象,该对象将消息写入文件中,从而跟踪StreamWriter和FileStream,然后传递该对象,以便您只打开一次文件,然后关闭一次文件。如果它是一个运行时间较长的程序,则将为每个“工作单元”(请求,定期中断等)创建这些对象之一。但是,这不是您要的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从插件写入“问题”表或“控制台”

来自分类Dev

将控制台输出写入文件

来自分类Dev

在postsharp中将日志写入文件而不是控制台

来自分类Dev

将robocopy输出写入控制台和日志文件

来自分类Dev

在postsharp中将日志写入文件而不是控制台

来自分类Dev

从控制台读取并使用stdio写入文件

来自分类Dev

将robocopy输出写入控制台和日志文件

来自分类Dev

使用 dictConfig 记录并写入控制台和文件

来自分类Dev

日志无法写入日志文件,但可以写入控制台

来自分类Dev

陷阱回显在写入文件时不会打印未写入控制台

来自分类Dev

如何为每个文件写入和控制台写入指定特定的记录器级别

来自分类Dev

从文件打开控制台

来自分类Dev

功能未正确写入控制台

来自分类Dev

VSCode Python写入调试控制台

来自分类Dev

如何直接写入控制台?

来自分类Dev

写入新控制台窗口的文本

来自分类Dev

将JSON写入控制台

来自分类Dev

在异步事件上写入控制台

来自分类Dev

程序将文件的内容读入数组,并显示控制台和写入文件

来自分类Dev

将列表(在R控制台输出中看到)写入文本文件

来自分类Dev

Perl:如何在写入文件时打印到控制台

来自分类Dev

从文件中提取数据后写入控制台时的额外数据

来自分类Dev

使Logback在本地写入控制台,但在服务器上记录文件

来自分类Dev

如何使用扩展方法将消息写入日志文件或控制台

来自分类Dev

如何编写同时写入控制台和日志文件的函数?

来自分类Dev

无法在文本文件中写入控制台输出

来自分类Dev

为什么这个并行过程不将输出写入文件,而是打印到控制台?

来自分类Dev

从C控制台程序中读取(或写入)文件时出错

来自分类Dev

IPython控制台太小,无法打印数据,如何写入文件?

Related 相关文章

  1. 1

    从插件写入“问题”表或“控制台”

  2. 2

    将控制台输出写入文件

  3. 3

    在postsharp中将日志写入文件而不是控制台

  4. 4

    将robocopy输出写入控制台和日志文件

  5. 5

    在postsharp中将日志写入文件而不是控制台

  6. 6

    从控制台读取并使用stdio写入文件

  7. 7

    将robocopy输出写入控制台和日志文件

  8. 8

    使用 dictConfig 记录并写入控制台和文件

  9. 9

    日志无法写入日志文件,但可以写入控制台

  10. 10

    陷阱回显在写入文件时不会打印未写入控制台

  11. 11

    如何为每个文件写入和控制台写入指定特定的记录器级别

  12. 12

    从文件打开控制台

  13. 13

    功能未正确写入控制台

  14. 14

    VSCode Python写入调试控制台

  15. 15

    如何直接写入控制台?

  16. 16

    写入新控制台窗口的文本

  17. 17

    将JSON写入控制台

  18. 18

    在异步事件上写入控制台

  19. 19

    程序将文件的内容读入数组,并显示控制台和写入文件

  20. 20

    将列表(在R控制台输出中看到)写入文本文件

  21. 21

    Perl:如何在写入文件时打印到控制台

  22. 22

    从文件中提取数据后写入控制台时的额外数据

  23. 23

    使Logback在本地写入控制台,但在服务器上记录文件

  24. 24

    如何使用扩展方法将消息写入日志文件或控制台

  25. 25

    如何编写同时写入控制台和日志文件的函数?

  26. 26

    无法在文本文件中写入控制台输出

  27. 27

    为什么这个并行过程不将输出写入文件,而是打印到控制台?

  28. 28

    从C控制台程序中读取(或写入)文件时出错

  29. 29

    IPython控制台太小,无法打印数据,如何写入文件?

热门标签

归档