请建议我一个可用于将流写入文件的好方法。
我只需要一个简单的c#函数,它可以将流作为输入并完成工作。 我需要为非常大的文件执行此操作,即文件> 4GB。
使用linq,扩展方法等可以做得更好吗?
请为我提供良好的效用函数,也可以通过收益率返回百分比的进度。
编辑:我知道循环一个字节[]并将其写入文件。我试过File.WriteAllBytes方法。但是,我只是在寻找一种使用linq,yield和扩展方法的非常好的方法。
答案 0 :(得分:3)
编辑:这是一个实用工具,可以解决这个问题:
更新:将第二个参数更改为文件名
public delegate void ProgressCallback(long position, long total);
public void Copy(Stream inputStream, string outputFile, ProgressCallback progressCallback)
{
using (var outputStream = File.OpenWrite(outputFile))
{
const int bufferSize = 4096;
while (inputStream.Position < inputStream.Length)
{
byte[] data = new byte[bufferSize];
int amountRead = inputStream.Read(data, 0, bufferSize);
outputStream.Write(data, 0, amountRead);
if (progressCallback != null)
progressCallback(inputStream.Position, inputStream.Length);
}
outputStream.Flush();
}
}