1

可能重复:
如何在 C# 中同时读取/写入文件

我想在同一个文本文件中写入和读取文本。这是代码

TextWriter notesWriter = new StreamWriter("text.txt");
TextReader notesReader; = new StreamReader("text.txt"); 

一旦文件打开以进行写入,它就会被锁定并阻止读取它。因此,抛出了一些异常,例如,

该进程无法访问文件“text.txt”,因为它正被另一个进程使用。

解决方法是什么?谢谢你。

编辑:假设,如果要更改文本框中的文本并将其保存在文件中并在需要设置文本框中的文本时从中读取。

4

5 回答 5

0

考虑到您的编辑,您不需要同时读取和写入。

  • 打开应用程序
  • 阅读文件。将文件的内容放入文本框中。关闭文件
  • 将文本框内容保存到文件中。关闭文件。

如您所见,如果您在两次使用之间关闭文件,则永远不需要同时读取和写入。

于 2012-10-16T14:12:35.127 回答
0

每次完成写入时,您都应该写入Close文件,除非您需要同时写入和读取,这是您不应该做的不可能的事情,因为在大多数情况下,用于存储数据的标准文本文件并不那么安全/硬/无用。

于 2012-10-16T14:05:22.050 回答
0

尝试类似的东西

using(TextWriter notesWriter = new StreamWriter("text.txt"))
{
//do write-things here
}

关闭刹车后,Streamwriter 将被处理,您可以读取该文件。

于 2012-10-16T14:07:49.623 回答
0

解决方法是不要这样做。虽然在技术上可以做到这一点,但您想要的方式(通过使用语义访问文件)几乎不可能是正确的,因为即使您修复了文件共享,这也意味着您正在读回相同的东西您在无限循环中编写。

您可以使用基于分页的文件访问隐喻,这又不太可能是您想要做的。

最可能的选择是您想写入不同的文件,即原始文件的(修改的?)副本,然后将副本与原始文件交换。

于 2012-10-16T14:07:50.157 回答
0

当然你可以同时读写,但你只需要一个参考:

Stream l_fileStream = File.Open( "text.txt", FileMode.Open, FileAccess.ReadWrite );

http://msdn.microsoft.com/en-us/library/s67691sb.aspx

现在您可以读取/写入文件:

StreamReader l_reader = new StreamReader( l_fileStream );
StreamWriter l_writer = new StreamWriter( l_fileStream );

你为什么想做这个?我不知道。似乎您想在开始下一个操作之前完成一个操作,除非您想在实际的字节数组中陷入困境(例如高级分页系统),在这种情况下,您可能没有足够的经验来拉这样的事关了。

于 2012-10-16T14:09:14.773 回答