Оберните Windows 8/WP8 StorageFile для синхронного доступа C++

Мне нужен класс-оболочка 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 ответ

Обычно вы оборачиваете асинхронные операции 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) 
{ 
    ...
} 
Другие вопросы по тегам