C#读写一个具有给定缓冲区长度的文件并剪切溢出

时间:2014-09-12 16:26:23

标签: 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);
            }
        }
    }

任何帮助都会很棒! :)

1 个答案:

答案 0 :(得分:4)

<强>问题:

fsOut.Write(buffer, 0, buffer.Length);

写入缓冲区中的所有字节,而只读取bytesRead金额。

<强> SOLUTION:

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

do
{
     bytesRead = fsIn.Read(buffer, 0, buffer.Length);
     fsOut.Write(buffer, 0, bytesRead );
} while (bytesRead != 0);