Cordova-ionic ngCordova ios или код ошибки чтения файла iPhone 5 ENCODING_ERR

Я использую cordova-ionic framework для создания приложения. Я новичок в iOS или iPhone в своем требовании, я должен прочитать файл в приложении. Я читаю файл в приложении Android, но тот же код показывает ошибку (код: 5).

Я следую кодам:

В андроиде:

$cordovaFile.writeFile(( 'user.json', data, {'append':false} )).then(function(result) { alert('file created.'); alert(JSON.stringify(result)); }, function(err) { // An error occured. Show a message to the user alert('file writed'); alert(JSON.stringify(err)); }); 

Я могу создавать файлы, писать, читать данные и удалять файл, но на ios-телефоне я не могу создать файл с использованием того же кода.

В iPhone:

 var data = {"user":{"name":"errer","email":"sdsdff@gmail.com","username":"sdfsdfsd"}}; $cordovaFile.writeFile(( 'user.json', data, {'append':false} )).then(function(result) { // Success! alert('file created.'); alert(JSON.stringify(result)); }, function(err) { // An error occured. Show a message to the user alert('file writed'); alert(JSON.stringify(err)); }); 

Я просто меняю свой каталог: cordova.file.cacheDirecotry / cordova.file.applicationDirectory

 $cordovaFile.createFile(( cordova.file.cacheDirecotry+'user.json', true )).then(function(result) { // Success! alert('file created.'); alert(JSON.stringify(result)); }, function(err) { // An error occured. Show a message to the user alert('file writed'); alert(JSON.stringify(err)); }); 

Все пути получения ошибки, как код: 12 или код: 5

Помогите мне решить эту проблему или дать мне идею получить путь к файлу приложения

Обратитесь к исходной документации: https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md#ios-file-system-layout

В iOS есть несколько каталогов, доступных только для чтения. Попробуйте изменить свой путь.

Дайте мне знать, если это не сработает для вас.

У меня есть некоторый прогресс.

Во-первых, я предупреждаю свой файл cordova.file.dataDirectory или cordova.file.documentsDirectory. Они есть

 file:///var/mobile/...../Library/NoCloud 

а также

 file:///var/mobile/..../Documents 

Затем я создаю файл без префикса и преуспеваю. Ссылаясь на этот https://github.com/driftyco/ng-cordova/issues/362

И сообщение об успешности показывает, что собственный URL-адрес файла сохраняется в

 file:///var/mobile/...../Library/files 

Это довольно странно. Кстати, я добавляю

 <preference name="iosPersistentFileLocation" value="Library" /> 

Согласно https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md#ios-persistent-storage-location

Все тесты выполняются на IOS, я не тестировал Android.

Обновления

Весь следующий код работал для меня и давал успешный ответ

 $cordovaFile.checkFile('/test.data') $cordovaFile.createFile('test.data',false) $cordovaFile.checkDir('/') 

Надеюсь, это может решить ваши проблемы.

 /* Here is what I am using for my Android and IOS apps Keep attention to a couple of things: - Android and IOS have other directorynames for files - Android devices have different root (myFSRootDirectory1 = Samsung Tab 3, msFSRootDirectory2 = Samsung SII) - $cordovaFile functions prefixes all pathnames with root $cordovaFileTransfer functions needs absolute pathnames Here I create the prefixes for File functions and FileTransfer functions for Android and IOS */ // The $ionicPlatform and ionic.Platorm are from Ionic framework // $ionicPlatform.ready(function() { if (ionic.Platform.isAndroid()) { // If running on Android console.log('cordova.file.externalDataDirectory: ' + cordova.file.externalDataDirectory); // // I use cordova.file.externalDataDirectory because this url is for Android devices // If you remove the app from the device these url are cleared too on the device. So keep it clean. // Remove the root from cordova.file.externalDataDirectory // myFsRootDirectory1 = 'file:///storage/emulated/0/'; // path for tablet myFsRootDirectory2 = 'file:///storage/sdcard0/'; // path for phone fileTransferDir = cordova.file.externalDataDirectory; if (fileTransferDir.indexOf(myFsRootDirectory1) === 0) { fileDir = fileTransferDir.replace(myFsRootDirectory1, ''); } if (fileTransferDir.indexOf(myFsRootDirectory2) === 0) { fileDir = fileTransferDir.replace(myFsRootDirectory2, ''); } console.log('Android FILETRANSFERDIR: ' + fileTransferDir); console.log('Android FILEDIR: ' + fileDir); } if (ionic.Platform.isIOS()) { // if running on IOS console.log('cordova.file.documentsDirectory: ' + cordova.file.documentsDirectory); // I use cordova.file.documentsDirectory because this url is for IOS (NOT backed on iCloud) devices fileTransferDir = cordova.file.documentsDirectory; fileDir = ''; console.log('IOS FILETRANSFERDIR: ' + fileTransferDir); console.log('IOS FILEDIR: ' + fileDir); } if (ionic.Platform.isAndroid() || ionic.Platform.isIOS()) { // // Just functions from the list below one by one ( or chain them) // } }); // Download file from 'http://www.yourdomain.com/test.jpg' to test/one/test.jpg on device Filesystem var hostPath = 'http://www.yourdomain.com/test.jpg'; var clientPath = fileTransferDir + 'test/one/test.jpg'; var fileTransferOptions = {}; $cordovaFile.downloadFile(hostPath, clientPath, true, fileTransferOptions).then (function() { }); // Create dir test $cordovaFile.createDir(fileDir + 'test/').then( function(dirEntry) { }); // Create dir aganin in dir test $cordovaFile.createDir(fileDir + 'test/one/').then( function(dirEntry) { }); // Create empty file test.txt in test/again/ $cordovaFile.createFile(fileDir + 'test/one/test.txt', true).then( function(fileEntry) { }); // List of files in test/again $cordovaFile.listDir(fileDir + 'test/one/').then( function(entries) { console.log('list dir: ', entries); }); // Write some text into file $cordovaFile.writeFile(fileDir + 'test/one/test.txt', 'Some text te test filewrite', '').then( function(result) { }); // Read text written in file $cordovaFile.readAsText(fileDir + 'test/one/test.txt').then( function(result) { console.log('readAsText: ', result); }); 

Возможно, это из-за опечатки? У вас есть cordova.file.cacheDirecotry . Не должно быть: cordova.file.cacheDirectory ?