我想用一个 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)
任何帮助都会很棒!:)
问题:
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)
| 归档时间: |
|
| 查看次数: |
3751 次 |
| 最近记录: |