在C#中读写文件的不同方式

时间:2009-11-11 15:18:31

标签: c# file stream

我试图了解不同的阅读和编写文件的方式及其优点和缺点。喜欢何时在File.Create或StreamReader / StreamWriter时使用TextWriter / TextReader FileStream等。

何时使用?

5 个答案:

答案 0 :(得分:7)

File.*静态方法只是构建新FileStream s,FileWriter等的简单方法。它们非常有用 - 我通常使用File。*而不是显式调用构造函数,除非我需要一些没有照顾的行为。

主要的关键点是:

  • 对于二进制数据,请使用Stream
  • 对于文字数据,请使用TextWriter / TextReader

如果您开始尝试使用TextReader读取二进制数据,则会发生错误。

答案 1 :(得分:5)

Stream是一个抽象类,表示 bytes 的序列。

  • FileStream派生自Stream,允许您将文件视为Stream。

TextReader / TextWriter是抽象类,可让您读/写字符

File.*静态方法只是简化FileStream创建的便捷方法。

答案 2 :(得分:3)

我肯定没有关于这个主题的专家,但我只想指出TextReaderTextWriter是许多其他类使用的基类(我相信是抽象的)用于处理不同类型的I / O.当您实际处理包含文本的StreamReader个对象时,应使用StreamWriterStream,例如文本文件的FileStream。但是TextReader不一定需要处理流;以StringReader类为例,它也继承自TextReader并只读取一个简单的字符串。

答案 3 :(得分:1)

每个进程使用的基本机制是相同的,因此没有一个比另一个“更好”。

不同之处在于执行某些任务的难易程度。例如,File.CreateText返回一个StreamWriter,它在功能上与手动创建StreamWriter并使用它写入文件没什么不同。它只需要更少的代码。 (我认为它是一种捷径)。

答案 4 :(得分:1)

不要忘记静态辅助方法System.IO.File.WriteAllByte(...).WriteAllText(...) .WriteAllLines(...)及其相应的.ReadAllByte(...).ReadAllText(...).ReadAllLines(...)方法。如果我没有任何理由捣乱我使用它们,因为它们是快速的getter / putter文件IO方法。