【发布时间】:2018-12-08 17:12:22
【问题描述】:
我有一个对象数组,每个对象都需要从二进制文件数据中加载自己。我创建了这些对象的数组,然后为每个对象调用一个 AsyncAction,开始读取其数据。麻烦的是,它们并没有完全加载——它们往往只从文件中获取部分数据。我怎样才能确保阅读全文?下面是代码的概要:首先我枚举文件夹内容以获取其中包含的每个文件的 StorageFile。然后,在一个 for 循环中,创建每个接收对象并传递下一个 StorageFile,并创建自己的 Buffer 和 DataReader 来处理读取。 m_file_bytes 是一个 std::vector。
m_buffer = co_await FileIO::ReadBufferAsync(nextFile);
m_data_reader = winrt::Windows::Storage::Streams::DataReader::FromBuffer(m_buffer);
m_file_bytes.resize(m_buffer.Length());
m_data_reader.ReadBytes(m_file_bytes);
我的想法是,由于缓冲区和读取器是对象的类成员,因此它们不会超出范围,并且可以在要求下一个对象将自己加载到单独的 AsyncAction 中时不间断地完成工作。但是 DataReader 只能获得一半或更少的文件数据。可以做些什么来确保它完成?感谢您提供任何见解。
[更新] 也许是文件系统一次只能处理一个读取任务,并且通过启动所有这些异步读取每个都中断前一个 -?但是必须有一种方法可以逐步读取一个装满文件的文件夹。
[更新] 我认为我可以通过采用同心循环的原理来实现它 - 这个想法是在第一个加载完成之前不要继续进行下一个加载。我认为 - 如果我错了,有人可以纠正我,文件系统不能同时读取。如果有一个公认且安全的示例说明如何执行此操作,我仍然很想听听,所以我不回答我自己的问题。
【问题讨论】:
标签: c++-winrt