2016-10-17 2 views
0

Эй У меня проблемы с файлом IO. Я использую некоторые стандартные файлы указателей, но я продолжаю получать эту ошибку: Необработанное исключение в 0x58CBC465 (msvcr120_app.dll) в ChemicalWar.exe: недопустимый параметр был передан функции, которая считает неверные параметры фатальными.Как записать двоичные данные в файл в приложении для магазина Windows с помощью C++

Теперь из того, что я собрал, я думаю, что это связано с тем, что у меня нет разрешения на запись в папку по умолчанию, но я не уверен, как изменить местоположение.

вот код, который я написал до сих пор, что дает мне неприятность:

FILE* ofile; 
NametoBinary(_filename); 
fopen_s(&ofile, (char*)folder->ToString(), "wb"); 
fwrite(&animhead, sizeof(Afhead), 1, ofile); 
fwrite(binbuff.data(), sizeof(unsigned char), binbuff.size(), ofile); 
fclose(ofile); 

он ломает по первому зову FWRITE. Любая помощь будет большой. Заранее спасибо.

+0

Где? _filename? Использовано? Кроме того, идентификаторы с ведущими символами подчеркивания обычно зарезервированы для компилятора, поэтому для предотвращения конфликтов не используйте их. –

+0

Каков тип переменной 'folder'? Вы можете выбрать некоторую функцию, которая возвращает версию переменной C-Style, возможно, что-то вроде 'folder-> ToString(). C_str()'. –

+0

Также проверьте статус возврата ваших файловых операций. Это хорошее место для надежного кодирования. –

ответ

0

Итак, я выяснил решение, поэтому опубликую его на случай, если кто-то еще должен знать.

FILE* ofile = nullptr; 
NametoBinary(_filename); 
auto folder = Windows::Storage::ApplicationData::Current->RoamingFolder; 
std::wstring ws(folder->Path->Data()); 
std::string full(ws.begin(), ws.end()); 
full += "\\"; 
full += _filename; 
fopen_s(&ofile, full.c_str(), "wb"); 
if (nullptr == ofile) return false; 
fwrite(&animhead, sizeof(Afhead), 1, ofile); 

Таким образом, в новых приложениях для окон есть собственная система FileI0. Это решение сохранит файл в папке в папке appdata.

Смежные вопросы