gpt4 book ai didi

c# - Binary Reader 和 Writer 同时打开?

转载 作者:行者123 更新时间:2023-11-30 12:33:44 25 4
gpt4 key购买 nike

我正在编写处理使用散列的文件的代码。我需要读取一个 block ,然后散列它,然后写入它,然后读取另一个 block ,等等。

换句话说,我需要做大量的阅读和写作。我敢肯定这真的很简单,但我只是想让专业人士来运行它...

做这样的事情是否可能并且可以接受:

BinaryReader br = new BinaryReader (File.OpenRead(path));
BinaryWriter bw = new BinaryWriter (File.OpenWrite(path));
br.dostuff();
bw.dostuff();

我记得在尝试打开和写入文件时遇到了某种文件流冲突错误,我不确定我做了什么才能得到它。问题是两个文件流吗?我可以有一个流来读取和写入吗?

最佳答案

这是完全可能和需要的,技术性的,如果你的写方法不改变文件的长度并且总是落后于读者,这应该不会有任何问题。事实上,从 API 的角度来看,这是可取的,因为这允许用户控制从何处读取和写入到何处。 (建议写入不同的文件,以防在加密过程中发生任何不良情况,您的输入文件不会被弄乱)。

类似于:

protected void Encrypt(Stream input, Stream output)
{
byte[] buffer = new byte[2048];

while (true)
{
// read
int current = input.Read(buffer, 0, buffer.Length);
if (current == 0)
break;

// encrypt
PerformActualEncryption(buffer, 0, current);

// write
output.Write(buffer, 0, current);
}
}

public void Main()
{
using (Stream inputStream = File.Open("file.dat", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (Stream outputStream = File.Open("file.dat", FileMode.Open, FileAccess.Write, FileShare.ReadWrite))
{
Encrypt(inputStream, outputStream);
}
}

既然您正在使用加密,我什至建议在另一个专门的流中执行实际的加密。这可以很好地清理代码。

class MySpecialHashingStream : Stream
{
...
}

protected void Encrypt(Stream input, Stream output)
{
Stream encryptedOutput = new MySpecialHashingStream(output);
input.CopyTo(encryptedOutput);
}

关于c# - Binary Reader 和 Writer 同时打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8652045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com