跟踪写入数据而不是文件流中的读取数据

Track writen data instead of read data in a file stream

我正在尝试按照本指南使用 blazor 服务器端制作进度条

https://www.meziantou.net/file-upload-with-progress-bar-in-blazor.htm

然后我想将文件写入文件系统,问题是读取它比实际将它写入磁盘要快得多,这意味着它似乎在大文件上停留在 100% 相当长的一段时间。

那么我可以让它跟踪它已经写入磁盘的数量吗?或者也许它们是同步的。

await using FileStream fs = new(path, FileMode.Create);
using var stream = file.OpenReadStream(maxFileSize);
while (await stream.ReadAsync(buffer) is int read && read > 0)
{
    //Writing to disk
    await fs.WriteAsync(buffer.AsMemory(0, read));
    //Updating how much data has been read
    uploadedFiles[startIndex].UploadedBytes += read;        
}

编辑: 在尝试了答案之后,它变得更有意义了,因为我使用的是 azure 文件共享。有一些延迟。 直接在文件上检查文件大小会给我正确的进度,但会变慢。

我想我会将文件存储在本地,然后再传输到 fileShare。或者查看 blobStorage 传输。

阅读和写作已经交错进行。

这里唯一可能有用的是冲洗:

while (await stream.ReadAsync(buffer) is int read && read > 0)
{
    //Writing to disk
    await fs.WriteAsync(buffer.AsMemory(0, read));
    // Force the actual writing
    await fs.FlushAsync();
    //Updating how much data has been read
    uploadedFiles[startIndex].UploadedBytes += read;    
}

如果没有这个,文件系统可以自由地将数据保存在缓冲区中,直到您关闭文件。

请注意,反复刷新可能会增加上传的总时间。