2

现在我正在使用 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() 的起始位置,并使用 Insert 执行所需的结果,如下所示: script = script.Insert (开始索引,新闻)

4

3 回答 3

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.

于 2013-02-04T13:48:44.063 回答
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);
于 2013-02-04T14:14:20.783 回答
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();
}

感谢所有提供帮助的人,它给了我真正想出这个的灵感。

于 2013-02-04T14:39:48.023 回答