现在我正在使用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)
答案 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();
}
感谢所有帮助过的人,它给了我实际想出的灵感。