如何读取文本文件并将所有文件内容保存到C#

时间:2017-04-17 04:37:44

标签: c# arrays

GoodEvening Everyone。我真的很帮助你们。我是C#中的新人,我老实说现在我正在尽力学习。无论如何,足够的故事。我有一个文本文件,我想用StreamReader读取,然后将文件的所有内容保存到char数组中并关闭文件。其中,我成功读取了文件内容,但现在的挑战是将内容保存到char数组中,然后使用二维来显示其内容。这是我到目前为止所拥有的!

1)负责文件读取的功能

   private void ReadConfigFile()
    {
        try
        {
            StreamReader inputFile;                             // To read the config file
            count = 0;                                          //config file counter variable

            inputFile = File.OpenText(@"config.txt");           //open the config file
            while (!inputFile.EndOfStream)
            {
                configFile = inputFile.ReadLine();              //reads the config file
                count++;
            }
            inputFile.Close();
            numOfLines = count;
            //MessageBox.Show($"{numOfLines.ToString()}"); //For debugging
            JaggedArray(configFile, numOfLines);
            //Display();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Configuration File", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

并且,实际显示二维char数组的函数

    private void JaggedArray(string config, int numberOfLines)
    {
        boardArray = new char[numberOfLines][];   //Character array of the configuration file

        for (int r = 0; r < boardArray.Length; r++) //looping through rows of gameboard
        {
            r = 0;
            for (int c = 0; c < boardArray[r].Length; c++) //looping through collumns of gameboard
            {
                MessageBox.Show(boardArray[r][c].ToString()); //For debugging
            }
        }
    }

我打算实现的目标是能够将文件放入二维char数组中,并且知道如何在其他JaggedArray函数中使用它来操作它。我真的很感激任何给我的帮助。拜托,我只是恳求而已,仅此而已。

2 个答案:

答案 0 :(得分:1)

如果要将文件的上下文保存到锯齿状数组,建议使用 Linq

using System.IO;
using System.Linq;

...

char[][] data = File
  .ReadLines(@"config.txt")
  .Select(line => line.ToCharArray())
  .ToArray();

要一次显示数组,您可以使用string.Join Linq

string result = string.Join(Environment.NewLine, data
// .Take(numberOfLines) // if you want to take just numberOfLines top lines
  .Select(line => string.Join("; ", line))); // put "" if you want to concat the chars

Console.Write(result);

基于循环的实现:

foreach (var line in data) {
  Console.WriteLine();

  foreach (char c in line) {
    Console.Write(c);
    Console.Write(' ');
  } 
} 

答案 1 :(得分:0)

如果我理解正确,你想将每行的字符添加到一个char数组中,然后将这些char数组放在一个“容器”数组中(在这种情况下,它将是一个数组的数组char 而不是 二维数组。请注意,多维数组是一个不同的东西,您可以在{{3}中了解更多信息}。

回到你的问题,你可以使用类似下面的函数来返回所需格式的文件内容(char数组的数组):

//A function that will read a file and return an array of an array of char.
char[][] ReadFileLinesAsArraysOfChar(string filePath)
{
    //Create a list of array of char.
    var lines = new List<char[]>();

    string line;
    StreamReader file = new StreamReader(filePath);
    while ((line = file.ReadLine()) != null)
    {
        //Convert each line into a char array and add to the list.
        lines.Add(line.ToCharArray());
    }
    //Convert the list to an array (of array of char) and return.
    return lines.ToArray();
}

<强>用法:

//Create the array from file.
var boardArray = ReadFileLinesAsArraysOfChar(@"config.txt");

//Display each line in a message box for demonstration.
foreach (char[] line in boardArray)
{
    //Using 'new string()' to convert the char array back to a string.
    MessageBox.Show(new string(line));
}

希望有所帮助:)