包装Windows 8 / WP8 StorageFile以进行同步C ++访问

时间:2014-09-23 17:07:34

标签: c++ windows-phone-8 windows-runtime ifstream storagefile

我需要一个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)但我仍然坚持每个操作的异步访问。有人提示如何实现这一目标吗?或者甚至内置功能?

此致

1 个答案:

答案 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) 
{ 
    ...
}