C# 我可以同时对 StreamReader(fs) 和 StreamWriter(fs, append: true) 使用 FileStream 吗?

C# Can I use FileStream for StreamReader(fs) and StreamWriter(fs, append: true) at the same time?

所以基本上我在绞刑架上苦苦挣扎,我不知道如何解决第一个问题。这就是为什么我认为我可能会加入另一个功能;一种使用 FileStream 将单词添加到我的文本文件中的方法 StreamWriter。 (我也有一个 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. 一起使用
  3. 我试过FileMode.Append(因为我想追加),但这只适用于只写模式,我也需要阅读文本。

  4. 我尝试在没有 ToSting() 的情况下使用文件流,但这导致 "Cannot convert from 'System.IO.FileStream' to 'string'."

  5. 我试图在不同的程序中做同样的事情,但只用 StreamReaderFileStream,但它仍然没有改变文本文件中的任何内容。

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

对不起,如果这看起来很乱,这是我第一次在 Whosebug 上提问。

所以这与副本不同的原因是因为我想附加文件,而不是写入(覆盖)它。我尝试了与 "duplicate" 完全相同的 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 对于 StreamWriter:

public string AddWordToFile(string word)
    {
        using (StreamWriter writer = new StreamWriter(fs.ToString(), append: true))
        {
           //bool ExistsInFile = false;
            for (int i = 0; i < words.Length; i++)
            {
                if (words.Contains(word))
                {
                    //ExistsInFile = true;
                    return "The word '" + word + "' already exists in the textfile.";
                }
            }
            if (!words.Contains(word))
            {
                //ExistsInFile = false;
                writer.WriteLine("," + word);
                writer.Close();
                return word + " added.";
            }
            else
            {
                return "Whoops, something went wrong :'I";
            }
        }              
    }      

我认为问题在于您有两个不同的 FileStreams 同时访问同一个文件,但这是行不通的。 一种方法是在使用 FileStreams 和 StreamWriters 后立即关闭它们,每次您需要访问文件时重新打开它。

要关闭 StreamWriter/FileStream,请使用:

StreamWriter.Close();

或文件流:

FileStream.Close();

您显然必须通过 FileStream 对象的名称替换 FileStream。

希望能帮到你

另一种方法是:

    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
    }

我已经测试过了,它在我的电脑上运行良好。

也许对你有帮助。

编辑: 这要容易得多,并将文件中的每一行读入字符串数组:

    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 将每个单词写到一个新行中。这样,您将获得文件中每个单词的数组。