Мне нужно открыть файл, который хранится в пакете моего приложения, используя функцию _wfopen_s
, но он возвращает объект FILE
с NULL _ptr
. Это происходит так:_wfopen_s не работает должным образом в приложении Windows Phone
var file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync("test\\test.ext");
var nativeWorker = new NativeWorker(file.Path);
<...>
auto err = _wfopen_s(&this->_myFile, fileName->Data(), L"rb");
err
Возвращается 0, но отладчик показывает, что это ошибка произошла где-то в msvcr110d.dll, и все поля this->_myFile
являются NULL, за исключением того, что _flag
равен 1 и _file
, который равен 3.
Чтобы выяснить, является ли проблема с самим файлом, я написал фрагмент, подобный тому, который был показан здесь: How to prevent lost save data when upgrade app on WP8 using cpp. Это выглядит следующим образом:
FILE *tmp;
auto tmpPath = Windows::Storage::ApplicationData::Current->LocalFolder->Path + "\\tmp.txt";
auto tmpErr = _wfopen_s(&tmp, tmpPath->Data(), L"w");
Результат почти такой же, за исключением того, что _flag
свойство tmp
теперь равны 2.
Я создаю стандартное приложение XAML, и это делается в Компонент времени выполнения Windows Phone. Но я уверен, что это не так, потому что я создал собственное 3D-приложение, и там же происходит. Это даже происходит в компоненте Runtime Windows Store, на который ссылается проект модульных тестов.
Я не могу отказаться от использования FILE
структуры, потому что она запрашивается третьей стороной DLL, которую я использую. Возможно, есть разрешение, которое я пропустил, или, может быть, есть способ конвертировать WinRT's IRandomAccessStream
в FILE
, чтобы я мог просто использовать API StorageFile
? Последнее облегчило бы мою жизнь :)
Ох ... Спасибо, я не знал этого :) Но все же он бросает 'AccessDeniedException' для файла, открывшего этот стиль. – Alovchin
Откуда возникает AccessDeniedException? –
Ну, я использую libFLAC.dll, поэтому он приходит откуда-то оттуда.Фактически, я реализовал другой способ доступа к файлу, поэтому этот конкретный вопрос больше не является актуальным. Хотя проблема сохраняется, и я попытаюсь найти более конкретную информацию о том, где она сбой. Благодаря! – Alovchin