在 C 语言中读取和写入现有 .txt 文件#

Reading and writing to an existing .txt file in C#

提问人:TonySoprano 提问时间:7/11/2022 更新时间:7/11/2022 访问量:47

问:

这里的初学者, 我在读取和写入现有 .txt 文件时遇到了一些麻烦。 我的总体目标是接收包含方程式的字符串(由数字和 +,-,*,/,(,) 运算符指定),通过我构建的计算器运行这些方程式(参见 Calculate 方法),然后将结果写入同一文件。 假设我的文件包含以下行:

1+8

罪(90)+9

然后,我应该写入该文件,因此它看起来像这样:

1+8 = 9

正弦(90)+9 = 10

等等。

这是我到目前为止所得到的:

List<string> lines = new List<string>();
List<string> results = new List<string>();

foreach (string line in File.ReadLines(@"C:\Users\...\file.txt"))
{
   string result = Calculate(line).ToString();
}

现在我真的不知道该怎么办。 我一直在尝试使用 File.WriteAllLines 和 File.AppendText,但抛出错误,当前流似乎被占用了。

有什么建议吗? 谢谢。

C# .NET 文件 IO

评论

0赞 jdweng 7/11/2022
您需要先关闭读取流,然后才能写入同一文件。
0赞 gunr2171 7/11/2022
什么错误,在哪里?
0赞 Dour High Arch 7/11/2022
就地读取和写入文件比您想象的要困难得多。任何错误或错误都可能不可恢复地损坏您的文件。您想要将更改写入临时文件,如果有效,请交换原始文件和临时文件

答:

0赞 gunr2171 7/11/2022 #1

从 切换到 。File.ReadLinesFile.ReadAllLines

Behind the Scenes 使用 Streams 在你请求时读取文件中的每一行。但是,为了做到这一点,它需要锁定文件,使其无法进行其他访问。您无法写入当前正在读取的文件(即在循环内)。ReadLinesforeach

ReadAllLines将所有行加载到内存中。然后,您可以自由地覆盖原始文件,因为您已经吸收了所需的所有信息。


作为替代方法,您可以继续使用 ,只需确保将结果写入其他文件即可。ReadLines