gpt4 book ai didi

c# - 反转文件中的字节顺序

转载 作者:行者123 更新时间:2023-11-30 19:43:12 24 4
gpt4 key购买 nike

您好,我想在不将整个文件加载到内存的情况下反转文件的字节。到目前为止,我只能设法从结尾到开头读取文件的字节,但我不确定我是否正在这样做corectly.This 是我到目前为止所拥有的:

        FileStream fileStream = new FileStream("file.txt", FileMode.Open, FileAccess.ReadWrite);
fileStream.Seek(1024, SeekOrigin.End);
byte[] buffer = new byte[1024];
int count;
while (fileStream.Position != 0)
{
count = fileStream.Read(buffer, 0, 1024);

}

现在如何反转文件的字节顺序并以相反的顺序保存它?

最佳答案

我认为你最好分块读取文件,从最后一个 block 开始,读取每个 block 并以相反的顺序写入这些字节。

一个例子:

MemoryStream output = new MemoryStream();
FileStream fs = new FileStream("D:\\file.txt", FileMode.Open);
long pos = fs.Length;
fs.Seek(0, SeekOrigin.End);
byte[] buffer = new byte[blockSize];
int length = blockSize;
while(pos > 0) {

length = (int)(pos < blockSize ? pos : blockSize);
pos -= length;
fs.Seek(pos, SeekOrigin.Begin);

int read = fs.Read(buffer,0, length);
byte[] reversed = buffer.Take(read).Reverse().ToArray();
output.Write(reversed,0, read);

}

为了保持示例简单,假设 Stream 在请求时实际读取 length 字节。 FileStream 会这样做 - 但在其他 Stream 实现的情况下,它们可能不会(网络流等)。

你也可以使用 memory mapped file为此,正如另一个答案中所建议的那样。我不知道在 .NET 中使用内存映射文件的确切开销,所以如果这对您很重要,请尝试使用您需要处理的实际文件大小来衡量这两种方法。如果文件很大而缓冲区很小,则逐 block 方法涉及大量文件查找。另一方面,设置内存映射文件会有开销。

关于c# - 反转文件中的字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15851797/

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