C#我可以同时将FileStream用于StreamReader(fs)和StreamWriter(fs,附加:true)吗?

时间:2019-01-23 13:23:27

标签: c# append filestream streamreader streamwriter

所以基本上我在与子手作斗争,我不知道如何解决第一个问题。这就是为什么我认为我可以添加另一个功能;一种使用StreamWriter使用FileStream向我的单词文本文件中添加单词的方法。 (我也有一个StreamReader,所以我可以看到它会选择哪个随机词。)

尝试过的事情(所有人:writer.WriteLine(text)):

  1. 我尝试将StreamWriter writer = new StreamReader(fs.ToString(), append: true)FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None)一起使用

  2. 我尝试了FileMode.Append(因为我想附加),但这仅适用于只写模式,我也需要阅读文本。

  3. 我试图在没有ToSting()的情况下使用文件流,但是导致“无法从'System.IO.FileStream'转换为'string'。”

  4. 我尝试在不同的程序中执行相同的操作,但是仅使用StreamReaderFileStream,但是它仍然没有更改文本文件中的任何内容。

我实际上希望它能做什么: 我希望该程序将能够在文本文件中附加一个字符串,同时仍然能够读取所选的单词。 (启动程序时,会从文本文件中选择一个随机单词。)

抱歉,这看起来很乱,这是我第一次问有关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

2 个答案:

答案 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。

希望我能为您提供帮助。