【问题标题】:Which writing to file method to use?使用哪种写入文件方法?
【发布时间】:2011-10-01 10:26:05
【问题描述】:

我真的对仅使用 System.IO 将数据写入文件的方式有多少种不同的方式感到困惑。
我的意思是,在 FileStreamStreamWriter 或只是 System.IO.file 方法之间......哪个最好用?

当你看到你可以对它们中的任何一个使用不同的构造时,它甚至会变得更加混乱,比如使用或不使用using

它们之间有什么区别吗?在线教程似乎只坚持其中一个,而完全忽略了其他的。其中一些教程甚至使用不同的方式来引用要写入的文件(在某些情况下使用 File 类型,在其他情况下使用 FileInfo 类型,甚至只是其路径/名称的字符串)。

其中任何一个比另一个更有效?

【问题讨论】:

    标签: c#


    【解决方案1】:

    Stream 是“数据字节”的抽象,它适用于文件以外的事物,例如通过网络发送的字节。

    TextReaders 和TextWriters 用于处理文本StreamReaders 和 StreamWriters 是包装 Streams 的特定类型。

    File 类专门用于将文件视为 unit 实体,而不是长字节流。因此:

    • 如果文件可能 (我会说这意味着 1 MiB+),请使用Stream 相关的类。在内存中保留 10-MiB byte[]string 通常是没有意义的,除非你真的需要随机访问所有它时间>。
    • 如果它总是很小(因此将其全部保存在内存中是有意义的),您可以只使用File 类来读取和写入byte[]s 或strings。

    【讨论】:

      【解决方案2】:

      有很多方法,因为有很多方法可以构造要发送的数据。你有字符串数组吗?您是否从其他来源(如网络流)流式传输数据?你想像日志一样写几行文本吗?

      知道你想写什么会有所帮助,然后我们可以帮助你决定如何写。

      哦,如果可以,请始终使用“使用”。即使您的代码失败,您也可以获得资源清理,这是一件好事。

      【讨论】:

        【解决方案3】:

        StreamWriterStreamReader 类用于读取和写入 文本FileStream 类用于二进制(非文本)数据.

        【讨论】:

          【解决方案4】:

          关于以下问题还有一些其他有趣的观点:

          FileStream vs/differences StreamWriter?

          【讨论】:

            【解决方案5】:

            这取决于您需要处理的抽象级别以及您处理的数据类型(文本与二进制)。

            如果您只需要将数据转储到文件中,您可以使用 File 类上的辅助方法—WriteAllBytes() 用于二进制(它只是为您写入 FileStream)和 WriteAllLines()WriteAllText() 用于文本(除非另有说明,否则他们使用StreamWriter 编码,使用UTF8NoBOM 编码)。

            StreamWriter 允许您将文本写入指定的流,该流可能是 FileStream 或其他类型的流。

            如果您需要写入字节并且想要进行低级控制,例如指定文件模式、系统权限、文件共享和其他此类选项,则需要使用文件流。您还可以指定这些选项来处理文本,方法是将其传递给 StreamWriter 或将文本视为字节(例如,通过使用 Encoding 对象)。

            【讨论】:

              猜你喜欢
              • 2016-02-01
              • 1970-01-01
              • 1970-01-01
              • 2011-01-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-11-30
              • 1970-01-01
              相关资源
              最近更新 更多