【发布时间】:2020-02-20 18:48:27
【问题描述】:
我想逐行读取二进制文件(我当然是在连续写入,但我知道在 457 字节后新数据开始,我确切知道字节结构以及写入信息的位置)并更改行的特殊入口。当我尝试使用 BinaryReader 和 BinaryWriter 访问同一个文件时,我得到一个 System.IO.IOException。我使用锁定来防止从其他地方访问文件。
我的代码是:
using (FileStream fs2 = new FileStream(testfile, FileMode.Open, FileAccess.Read))
{
using (BinaryReader r = new BinaryReader(fs2))
{
using (BinaryWriter bw = new BinaryWriter(new FileStream(testfile, FileMode.Open, FileAccess.Write), utf8))
{
for (int i = 0; i < 11000; i+=457)
{
int myint = r.ReadInt64();
bw.Seek(i, SeekOrigin.Current);
bw.Write(myint*2);
}
}
}
}
我该怎么做?
【问题讨论】:
-
如何逐行读取二进制文件?在这种情况下,二进制文件是什么意思?是什么样的二进制文件?
-
如何逐行读取二进制文件?你能澄清一下你想要达到的目标吗?
-
代码没有指定要使用的FileShare,当文件已经打开写入时默认拒绝读取。正确的方法是使用 FileAccess.ReadWrite 并让 BinaryReader 和 writer 使用相同的流。请注意,FileShare.ReadWrite 太危险了,因为它还允许另一个进程弄乱该文件。
-
好像哪里有重复。
-
你能不能打开你的文件来读取,打开一个不同的文件来写入,然后当你完成任何你想要做的改变后,删除原始文件并重命名新文件?或者试试这个stackoverflow.com/questions/605685/…
标签: c# binaryreader binarywriter