0

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

问候,

4

1 回答 1

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) 
{ 
    ...
} 
于 2014-09-23T17:34:35.417 回答