Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#从&;到同一文件_C# - Fatal编程技术网

C#从&;到同一文件

C#从&;到同一文件,c#,C#,可能重复: 我想在同一个文本文件中写入和读取文本。这是密码 TextWriter notesWriter = new StreamWriter("text.txt"); TextReader notesReader; = new StreamReader("text.txt"); 一旦文件打开进行写入,它将被锁定并阻止读取。 因此,抛出一些异常,如 进程无法访问文件“text.txt”,因为另一进程正在使用该文件 解决这个问题的方法是什么?多谢各位 编辑: 假设,如果要更改文本框中的文本并

可能重复:

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

TextWriter notesWriter = new StreamWriter("text.txt");
TextReader notesReader; = new StreamReader("text.txt"); 
一旦文件打开进行写入,它将被锁定并阻止读取。 因此,抛出一些异常,如

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

解决这个问题的方法是什么?多谢各位

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

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

尝试类似的方法

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

关闭制动器后,Streamwriter将被释放,您可以读取该文件。

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

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


最有可能的选择是,您希望写入另一个文件,即原始文件的(修改的?)副本,然后将副本与原始文件交换。

确保您可以同时读取和写入,但您只需要一个引用:

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

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

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

你为什么要这么做?我不知道。似乎您希望在开始下一个操作之前先完成一个操作,除非您想在实际的字节数组(如高级分页系统)中运行并弄脏,在这种情况下,您可能没有足够的经验来完成这样的操作。

考虑到您的编辑,您不需要同时读写

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

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

不要同时读写?您想做什么?你能不能先读取文件,然后再写入文件(在你读完之后)?写入文件并关闭它,然后在需要时打开并读取它,这没有什么错。
“除非你需要同时写入和读取,这是不可能的”
不,不是。是的,只是在你发表评论之前对未来进行编辑(我知道它即将到来:))线程将在一分钟内关闭,不管怎样“你不应该做的事情”,我也不同意这一点-只要在任何时候只有一个线程在使用该文件,使用同一个文件对象是100%可以的,只要你知道你在文件中写入的位置。我同意,但为了简单起见,出于刷新/缓冲的原因,高级语言的标准IO库不允许同时打开文件进行写入/读取。