所以基本上我在与子手作斗争,我不知道如何解决第一个问题。这就是为什么我认为我可以添加另一个功能;一种使用StreamWriter
使用FileStream
向我的单词文本文件中添加单词的方法。 (我也有一个StreamReader
,所以我可以看到它会选择哪个随机词。)
尝试过的事情(所有人:writer.WriteLine(text)
):
我尝试将StreamWriter writer = new StreamReader(fs.ToString(), append: true)
与FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None)
一起使用
我尝试了FileMode.Append
(因为我想附加),但这仅适用于只写模式,我也需要阅读文本。
我试图在没有ToSting()的情况下使用文件流,但是导致“无法从'System.IO.FileStream'转换为'string'。”
我尝试在不同的程序中执行相同的操作,但是仅使用StreamReader
和FileStream
,但是它仍然没有更改文本文件中的任何内容。
我实际上希望它能做什么: 我希望该程序将能够在文本文件中附加一个字符串,同时仍然能够读取所选的单词。 (启动程序时,会从文本文件中选择一个随机单词。)
抱歉,这看起来很乱,这是我第一次问有关stackoverflow的问题。
所以为什么这与重复项不同是因为我要附加文件,而不是写入(覆盖)文件。我尝试了与“重复项”完全相同的FileStream
,但它只是消除了错误。现在,我仍然遇到故障StreamWriter
。
部分代码:
private static FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
private static StreamReader reader = new StreamReader(fs);
private static string[] words = reader.ReadToEnd().Split(',');
public static Random randomizer = new Random();
private static int wordindex = randomizer.Next(0, words.Length);
public string GetWord()
{
return words[wordindex]; //returns random value out of array = random woord
}
`
而using
的{{1}}:
StreamWriter
答案 0 :(得分:1)
另一种方法是:
static void ReadAndWrite()
{
string file = File.ReadAllText(@"C:\whatever.txt"); //read C:\whatever.txt
File.AppendAllText(@"C:\whatever.txt", "Text to append"); //append "Text to append" to C:\whatever.txt
}
我已经对此进行了测试,并且可以在我的PC上正常工作。
也许可以帮助您。
编辑: 这要容易得多,它会将文件中的每一行读入一个字符串数组:
static void ReadAndWrite()
{
string[] words = File.ReadAllLines(@"C:\whatever.txt");
File.AppendAllText(@"C:\whatever.txt", "Word to append\r\n"); //append "Word to append" in a new Line to C:\whatever.txt
}
要获得单词数组,请像在示例中一样,通过在每个单词之后附加\r\n
,将每个单词写到新行中。这样,您将获得文件中每个单词的数组。
答案 1 :(得分:0)
我认为问题在于您有两个不同的FileStreams一次访问同一个文件,这是行不通的。 一种方法是在使用FileStreams和StreamWriters之后立即关闭它们,并且每次需要访问文件时都将其重新打开。
要关闭StreamWriter / FileStream,请使用:
StreamWriter.Close();
或用于FileStreams:
FileStream.Close();
您显然必须通过FileStream对象的Name替换FileStream。
希望我能为您提供帮助。