我希望用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);
}
}
}
任何帮助都会很棒! :)
答案 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);