我可以使用进度条来显示进度吗
File.WriteAllBytes(file, array)
在 C# 中?
不。
您需要使用循环将字节写入块中。类似以下内容应该可以帮助您入门。请注意,这需要在后台线程中运行。我您使用的是 WinForms,您可以使用BackgroundWorker
.
using(var stream = new FileStream(...))
using(var writer = new BinaryWriter(stream)) {
var bytesLeft = array.Length; // assuming array is an array of bytes
var bytesWritten = 0;
while(bytesLeft > 0) {
var chunkSize = Math.Min(64, bytesLeft);
writer.WriteBytes(array, bytesWritten, chunkSize);
bytesWritten += chunkSize;
bytesLeft -= chunkSize;
// notify progressbar (assuming you're using a background worker)
backgroundWorker.ReportProgress(bytesWritten * 100 / array.Length);
}
}
编辑:正如 Patashu 在下面指出的那样,您也可以执行任务并等待。我认为我的方法相当简单,不需要任何额外的线程(除了你需要执行操作的一个后台线程)。这是传统的方式,效果很好。
由于WriteAllBytes
是一种同步方法,因此在操作完成之前,您什么也不做,也不知道操作。
您需要做的是有一个像 WriteAllBytes 这样的方法,但写入是异步的,例如在http://msdn.microsoft.com/en-AU/library/jj155757.aspx中。您可以让异步方法每隔一段时间停止并向 GUI 报告其进度,因为它是单独运行的。