C# 在Visual Studio中使用StringReader读取文本文件

C# 在Visual Studio中使用StringReader读取文本文件,c#,datagridview,stringreader,C#,Datagridview,Stringreader,我正在做一个小益智游戏,并试图使用StringReader将一些信息从文本文件加载到字符串中。它将加载到数据网格视图中。该文本文件名为TextFile1.txt,位于名为Puzzles的文件夹中。文本文件设置为始终复制到输出目录 项目将生成但不会加载数据网格视图中的项。文本文件如下所示 x|y|direction|number|word|clue 5|5|down|1|love|Let _____ Rule 4|5|across|2|closed|Not Open 5|8|across|3|er

我正在做一个小益智游戏,并试图使用StringReader将一些信息从文本文件加载到字符串中。它将加载到数据网格视图中。该文本文件名为TextFile1.txt,位于名为Puzzles的文件夹中。文本文件设置为始终复制到输出目录

项目将生成但不会加载数据网格视图中的项。文本文件如下所示

x|y|direction|number|word|clue
5|5|down|1|love|Let _____ Rule
4|5|across|2|closed|Not Open
5|8|across|3|eraser|At the other end of a pencil
10|8|down|2|red|Hunt for _____ October
10|10|across|4|dallas|Redskin rival's city
9|5|down|3|dare|Triple Dog
13|8|down|4|relapse|To succumb again
11|12|across|5|cap|A night ____
代码

线索窗口=新线索();
列表idc=新列表();
公共字符串puzzle_file=Application.StartupPath+“\\Puzzles\\TextFile1.txt”;
公共表格1()
{
buildWordList();
初始化组件();
}
private void exitToolStripMenuItem\u单击(对象发送者,事件参数e)
{
Application.Exit();
}
私有void buildWordList()
{
字符串行=”;
使用(StringReader s=新StringReader(拼图文件))
{
s、 ReadToEnd();
line=s.ReadLine();//忽略第一行
而((line=s.ReadLine())!=null)
{
字符串[]l=line.Split(“|”);
Add(新的id_单元(Int32.Parse(l[0])、Int32.Parse(l[1])、l[2]、l[3]、l[4]、l[5]);
clue_window.clue_table.Rows.Add(新字符串[]{l[3],l[2],l[5]});
}
}
}

首先,当您遇到此类问题时,请首先检查读卡器的路径( 我建议您使用StreamReader而不是StringReader)

在我看来,有两个问题可能是:

1.由于找不到txt文件,读取可能不起作用。(在循环中输入时显示messageBox框以检查)

2.s.ReadToEnd读取流中的所有内容


该函数用于复制文件中的所有数据(从第一个字节到最后一个字节)。因此,下次读取一行时,它将返回null。

毫无疑问?没问题吧?令人惊叹的!别开玩笑了,使用StreamReader,而不是StringReader。StreamReader从文件(或流)中读取文本,StringReader——顾名思义——从给定字符串中读取文本/字符。如果您仍然感到困惑,请花一些时间阅读StreamReader和StringReader的文档后跟
line=s.ReadLine()。在这种情况下,变量
line
将包含什么(为什么会这样)?如果它是一个小文件,我建议只使用
file.ReadLines()
。使用起来更简单,并将字符串公开为可枚举的
Clues clue_window = new Clues();
    List<id_cells> idc = new List<id_cells>();
    public String puzzle_file = Application.StartupPath + "\\Puzzles\\TextFile1.txt";


    public Form1()
    {
        buildWordList();
        InitializeComponent();
    }



    private void exitToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }

    private void buildWordList()
    {
        String line = "";
        using (StringReader s = new StringReader(puzzle_file))
        {
            s.ReadToEnd();
            line = s.ReadLine();//ignores the first line
            while((line = s.ReadLine()) != null)
            {
                String[] l = line.Split('|');
                idc.Add(new id_cells(Int32.Parse(l[0]), Int32.Parse(l[1]), l[2], l[3], l[4], l[5]));
                clue_window.clue_table.Rows.Add(new String[] { l[3], l[2], l[5] });
            }
        }
    }