使用StringReader附加文本(在reader.ReadLine()之后)

时间:2013-02-04 13:26:27

标签: c# append stringreader

现在我正在使用c#构建游戏应用程序,这需要从文本文件加载游戏脚本。 (这是一个非常简单的视觉小说游戏)

现在,当主表单加载时,我从文件script.txt加载脚本 我宣布:

StringReader reader = new StringReader(script);

作为全局变量

现在在游戏中间,读者位于字符串脚本的中间, 我需要从读者的下一行开始追加。 基本上我想要实现的目标:

  

将所有来自“news.txt”的文本附加到从reader.ReadLine()开始的脚本中[即在字符串脚本中间]

实现这一目标的最有效解决方案是什么?

我所知道的:

StreamReader sr = new StreamReader("news.txt");
string news = sr.ReadToEnd();
//Now how to append 'news' to reader.ReadLine() ??

编辑以获得更多说明(对不起,这是我第一次在这里询问): 我将尝试更多地解释我在这里想要实现的目标。 我现在拥有的是什么:

//global variables
string script;
StringReader reader;

//during form_load
StreamReader sr = new StreamReader("script.txt");
script = sr.ReadToEnd();
reader - new StringReader(script);

//And as the game progresses, I keep on implementing reader.ReadLine()..
//At one point, the program will ask the user, do you want to watch the news?
DialogResult dialogResult = MessageBox("Do you want to watch the news?", , MessageBoxButtons.YesNo

if(dialogResult == DialogResult.Yes)
{
   StreamReader newsSr = new StreamReader("news.txt");
   string news = newsSr.ReadToEnd();
   //now I want to append the contents of 'news' to the string 'script' after reader.ReadLine() - any best way to implement this?
}

一种可能的方式(我认为这也是最糟糕的方式)是引入一个计数变量,以获得最后一个reader.ReadLine()的起始位置, 并使用如下插入执行所需的结果: script = script.Insert(startIndex,news)

3 个答案:

答案 0 :(得分:0)

您无法写入StringReader

但是,如果我理解你的最新问题,我认为你想要这个。

StreamReader sr = new StreamReader("news.txt");
string news = string.Empty;
string line = sr.ReadLine();

while (line != null)
{
   news += line;
   news += someOtherString;
   line = sr.ReadLine();
}

除了我不会用字符串连接来做这件事。我会用StringBuilder

执行此操作

答案 1 :(得分:0)

只需使用File.ReadAllLines()将文件加载到内存中。

然后,您可以将其作为字符串数组进行访问,而无需担心读者,编写者,流等。

例如:

// load files as arrays
string[] scriptLinesArray = File.ReadAllLines("script.txt");
string[] newsLinesArray = File.ReadAllLines("news.txt");

// convert arrays to lists
var script = new List<string>(scriptLinesArray);
var news = new List<string>(newsLinesArray );

// append news list to script list
script.AddRange(news);

答案 2 :(得分:0)

最后我能够解决这个问题。 这就是我所使用的(如果有人想知道:))

//I'm using a switch statement, in case reader.ReadLine() == "#(morningnews)"
dialogResult = MessageBox.Show("Do you want to watch the news?", , MessageBoxButtons.YesNo);
if(dialogResult = DialogResult.Yes)
{
  StreamReader sr = new StreamReader(directoryName + "\\morningactivities\\morningnews1.txt");
  string news = sr.ReadToEnd();
  script = script.Replace("#(morningnews)", "#(morningnews)\n" + news);
  reader = new StringReader(script);
  while (reader.ReadLine() != "#(morningnews)")
    continue;
  loadNextScript();
}

感谢所有帮助过的人,它给了我实际想出的灵感。