C# 读写给定缓冲区长度的文件并切除溢出

use*_*391 2 c# filestream

我想用一个 FileStream 读取 1MB 块的文件,并用另一个 FileStream 将其写回。

我遇到的问题是,大约 2.9MB 的文件达到了大约 3.9MB,因为最后一个缓冲区对于数据来说太大了(所以我认为它被 \0 填充)。

有没有办法减少最后一个缓冲区的溢出?

public static void ReadAndWriteFileStreamTest() {
        string outputFile = "output.dat";
        string inputFile = "input.dat";
        using (FileStream fsOut = File.OpenWrite(outputFile))
        {
            using (FileStream fsIn = File.OpenRead(inputFile))
            {
                //read in ~1 MB chunks
                int bufferLen = 1000000;
                byte[] buffer = new byte[bufferLen];
                long bytesRead;
                do
                {
                    bytesRead = fsIn.Read(buffer, 0, bufferLen);
                    fsOut.Write(buffer, 0, buffer.Length);
                } while (bytesRead != 0);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒!:)

Eug*_*kal 6

问题:

fsOut.Write(buffer, 0, buffer.Length);
Run Code Online (Sandbox Code Playgroud)

写入缓冲区中的所有字节,而您只读取bytesRead数量。

解决方案:

您应该使用FileStream.WritebytesRead的第三个参数-实际读取的字节数,以避免写入未实际读取的字节。count

do
{
     bytesRead = fsIn.Read(buffer, 0, buffer.Length);
     fsOut.Write(buffer, 0, bytesRead );
} while (bytesRead != 0);
Run Code Online (Sandbox Code Playgroud)