我需要一个C ++包装器类,它可以从Windows 8 / WP8存储文件(http://msdn.microsoft.com/library/windows/apps/br227171)同步读/写/搜索数据:
class FileWrapper
{
public:
FileWrapper(StorageFile^ file); // IRandomAccessStream or IInputStream
// are fine as input arguments too
byte* readBytes(int bytesToRead, int &bytesGot);
bool writeBytes(byte* data, int size);
bool seek(int position);
}
应该即时从文件中读取数据。它不应该缓存在内存中,并且不应该将存储文件复制到应用程序的目录中,在该目录中可以使用标准的fopen和ifstream函数。
我试图找出如何执行此操作(包括Microsoft文件访问示例代码:http://code.msdn.microsoft.com/windowsapps/File-access-sample-d723e597)但我仍然坚持每个操作的异步访问。有人提示如何实现这一目标吗?或者甚至内置功能?
此致
答案 0 :(得分:0)
通常使用create_task()
方法包装异步操作,您可以通过调用task.get()
来完成任务的执行以实现同步,但是IIRC并不是这样做的。为文件访问工作,因为操作可能会尝试返回它们执行的同一个线程,如果你阻止该线程 - 你最终会遇到死锁。我没有时间尝试这个,但也许如果你从另一个线程开始 - 你可以等待你的线程完成这样的事情,虽然它可能仍然会死锁:
auto createTaskTask = create_task([]()
{
return create_task(FileIO::ReadTextAsync(file));
}
auto readFileTask = createTaskTask.get();
try
{
String^ fileContent = readFileTask.get();
}
catch(Exception^ ex)
{
...
}