【问题标题】:read and output a text file using streamreader char by char使用streamreader char by char读取和输出文本文件
【发布时间】:2012-08-16 18:44:51
【问题描述】:

我要做的是读取文件 a.txt 并在一行中输出每个字符我很难解决这个问题任何帮助将非常感激。如果你写代码请评论作为初学者,我可以更清楚地理解。谢谢

namespace ConsoleApplication13
{
    class Program
    {
        static void Main(string[] args)
        {
            using (StreamReader r = new StreamReader("a.txt"))
            {

               string @char;
               while((@char = r.ReadBlock() != null))
                foreach(char i in @char)
                {
                    Console.WriteLine(i);

                }

            }

        }
    }
}

【问题讨论】:

  • 你的目的...是一个字符一个字符?还是逐行?或者...?目前尚不清楚您要做什么
  • 这是我确定我做的不对的实际代码:)
  • 好的;很公平 - 但你能澄清一下究竟你想要做什么吗?
  • @MarcGravell 我想读取文件并按字符输出所有文件字符,每个字符在新行中
  • 您可以在此处msdn.microsoft.com/en-us/library/… 阅读有关 BinaryReader 的信息。还有一个代码示例。

标签: c#


【解决方案1】:

我想读取文件并按字符输出所有文件字符,每个字符都在新行中

好的;有很多方法可以做到这一点;最简单的是(对于小文件):

string body = File.ReadAllText("a.txt");
foreach (char c in body) Console.WriteLine(c);

使用ReadBlock 以块(而不是行)处理文件:

using (StreamReader r = new StreamReader("a.txt"))
{
    char[] buffer = new char[1024];
    int read;
    while ((read = r.ReadBlock(buffer, 0, buffer.Length)) > 0)
    {
        for (int i = 0; i < read; i++)
            Console.WriteLine(buffer[i]);
    }
}

这一次读取 最多 1024 个字符的块,然后写出我们读取的任何内容,每个字符在一个新行上。变量read 告诉我们在该迭代中读取了多少个字符; read &gt; 0 测试(稍微隐藏,但确实存在)询问“我们是否已到达文件末尾?” - 因为ReadBlock 最后会返回 0。

【讨论】:

  • 谢谢,这真的很有帮助。所以读取块只能在写入前读取 1024 个字符还是需要更多?
  • @Geek 您可以将缓冲区设置为任何您喜欢的大小;这是一种折衷方案,在一次将所有内容加载到内存(缓冲区过大)和多次访问 IO 堆栈(缓冲区过小)之间。典型的 IO 缓冲区(作为一个非常粗略的指南)介于 512 字节到 8k(8192 字节)之间。 1024 只是“对于大多数情况来说足够好,分配起来相当便宜”。请注意,我们每次迭代都使用 same 缓冲区 - 因此您可以仅使用 1k 缓冲区来处理 200MB 文件。
  • 感谢 marc 非常有价值和有帮助的再次感谢 :)
猜你喜欢
  • 2015-07-07
  • 1970-01-01
  • 2022-10-23
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多