文件流读取数组到行 C#

filestream read array to lines C#

我对此很陌生。 我应该写一个带有数组的文件(知道了)并读取 7 行的内容,每行 11 个字节(不知道如何)。

如果你会说德语,那就是我的任务: 控制台输出应该是 7 行,每行 11 行 字符是结构化的——这也对应于上面数组元素的排列。 但是请注意,数组中的一行由 33 个字符组成 - 您的控制台输出应该 由十一个字符组成!

这是我目前的情况:

using System;
using System.IO;

namespace ESA_2
{
    class Program
    {
        public void ESA2In(string Path)
        {
            byte[] array = {32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32,
                            32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
                            67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
                            67, 32, 32, 32, 32, 32, 32, 35, 32, 35, 32,
                            67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
                            32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
                            32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32 };

            FileStream stream = File.Open(@"C:\users\...test.txt", FileMode.Create);
            stream.Write(array, 0, array.Length);
            stream.Close();
        }

        public void ESA2Out(string Path)
        {
            StreamReader reader = new StreamReader(File.Open(@"C:\users\...test.txt", FileMode.Open));
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                Console.WriteLine(line);
            }
            Console.WriteLine();
            reader.Close();
        }

        static void Main(string[] args)
        {
            string Path = @"C:\users\...\test.txt";

            Program test = new Program();

            test.ESA2In(Path);
            test.ESA2Out(Path);
        }
    }
}

您可以使用 Read() 方法将符号作为字符串读回。 例如,

public void ESA2Out(string Path)
{
  using (var reader = new StreamReader(File.Open(@"C:\users\...test.txt", FileMode.Open)))
  {
    for (var lineNumber = 0; lineNumber < 7; lineNumber++)
    {
      string line = "";
      for (var charNumber = 0; charNumber < 11; charNumber++)
        line = line + (char)reader.Read();
      Console.WriteLine(line);
    }
    Console.WriteLine();
    reader.Close();
  }
}

顺便说一句,它应该打印大 'C#',其中 'C' 由 'C'-字母和 '#' 的 '#' 组成。

Quercus 解决方案涵盖了您的问题。我只是想为您提供与实际任务相对应的更简单的解决方案。您的任务是将二进制输出转换为字符字母,并在每 11 个字符后添加一个换行符。你的作业没有要求写作和阅读。

byte[] array = {32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32,
                32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
                67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
                67, 32, 32, 32, 32, 32, 32, 35, 32, 35, 32,
                67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
                32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
                32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32 };

string output = string.Empty;
for(int i = 0; i<array.Length; i++)
{
     if (i % 11 == 0) output += Environment.NewLine;
     output += (char)array[i];
}

Console.WriteLine(output);
Console.ReadLine();

更短的代码

public void ESA2Out()
{
    ReadOnlySpan<char> chars = File.ReadAllBytes("test.txt")
        .Select(b => (char)b).ToArray();

    for (int i = 0; i < chars.Length; i += 11)
    {
        Console.WriteLine(new string(chars.Slice(i, 11)));
    }
}