gpt4 book ai didi

c# - XmlReader - 如何更新进度条

转载 作者:太空宇宙 更新时间:2023-11-03 22:43:02 34 4
gpt4 key购买 nike

我正在使用 XmlReader 读取非常大的 XML 文件(超过 6GB 的数据)以加快一切速度并且工作得非常好。

我在另一个线程中执行此操作(不使用后台工作程序)并且我不知道如何更新进度条,因为 XmlReader 没有某种“当前位置,消耗的字节”或类似的东西,谁可以帮助我创建一个关于进度的平均计算。

我尝试使用 XmlReader 和 StreamReader 来计算每一行的字节数,然后根据消耗的字节数/文件长度 * 100 更新进度条,但是程序在有些时候给我一个错误,比如

Name cannot begin with the '<' character, hexadecimal value 0x3C. Line 109, position 27.'

当使用 StreamReader Encoding.UTF8.GetByteCount(ReadLine()) 时。

实现这个的好方法是什么?我在谷歌上搜索并找到了一些实现此目的的方法,但没有使用 XmlReader,而且我不能不使用 XmlReader。

谢谢!

最佳答案

您可以查看底层流的位置:

using (var fileStream = File.OpenRead("somePath"))
{
using (var reader = XmlReader.Create(fileStream))
{
long lastPosition = 0;

while (reader.Read())
{
if (lastPosition != fileStream.Position)
{
lastPosition = fileStream.Position;

Console.WriteLine($"Read {lastPosition} from {fileStream.Length} ({100.0 * lastPosition / fileStream.Length}%)");
}
}
}
}

请注意,这将根据您使用的基础流为您提供不同的输出。在我的系统上,读取器读取 4KB 的 block 。

关于c# - XmlReader - 如何更新进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51362302/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com