Оберните 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) но я застрял с асинхронным доступом каждой операции. Кто-то намекает, как этого добиться? Или есть даже встроенный функционал?

С Уважением,

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

Другие решения


По вопросам рекламы [email protected]