Saya menggunakan Plugin File Cordova untuk membuat file log di penyimpanan internal perangkat saya yang menjalankan Nougat. Saya tidak memiliki kartu SD eksternal.
Ini kode saya
function myLogger(logString) {
alert("Inside mylogger");
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fs) {
alert("Inside Local File System");
var absPath = cordova.file.externalRootDirectory;
var fileDir = cordova.file.externalDataDirectory.replace(cordova.file.externalRootDirectory, '');
var fileName = "logfile.txt";
var filePath = fileDir + fileName;
alert(filePath);
fs.root.getFile(filePath, {create: true, exclusive: false}, function (fileEntry) {
alert("Inside getFile method");
fileEntry.createWriter(function (fileWriter) {
alert("Inside createwriter method");
fileWriter.seek(fileWriter.length); // Start write position at EOF.
var logStringWithTimeStamp = Date.parse(new Date()) + " : " + logString + "\n";
var blob = new Blob([logStringWithTimeStamp], {type: 'text/plain', endings: 'native'});
fileWriter.write(blob);
}, function (err) {
console.log("Err logString" + err);
});
}, function (err) {
console.log("Err" + err);
});
}, function (err) {
console.log("Err1" + err);
});
}
myLogger("Hello Logger");
Dalam kode ini saya mendapatkan Kode Kesalahan 9 - INVALID_MODIFICATION_ERR
Saya telah memeriksa berulang kali - kode tidak masuk ke blok fs.root.getFile. Jadi saya mengubah kodenya sedikit.
KODE ALTERNATIF yang tidak memberikan kesalahan tetapi file log tetap tidak dibuat
function myLogger(logString) {
alert("Inside mylogger");
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fs) {
alert("Inside Local File System");
var absPath = cordova.file.externalRootDirectory;
var fileDir = cordova.file.externalDataDirectory.replace(cordova.file.externalRootDirectory, '');
var fileName = "logfile.txt";
var filePath = fileDir + fileName;
alert(filePath);
fs.root.getFile(fileName, {create: true, exclusive: false}, function (fileEntry) {
alert("Inside getFile method");
fileEntry.createWriter(function (fileWriter) {
alert("Inside createwriter method");
fileWriter.seek(fileWriter.length); // Start write position at EOF.
var logStringWithTimeStamp = Date.parse(new Date()) + " : " + logString + "\n";
var blob = new Blob([logStringWithTimeStamp], {type: 'text/plain', endings: 'native'});
fileWriter.write(blob);
}, function (err) {
console.log("Err logString" + err);
});
}, function (err) {
console.log("Err" + err);
});
}, function (err) {
console.log("Err1" + err);
});
}
myLogger("Hello Logger");
Dalam Kode ke-2 saya memberikan fileName sebagai parameter alih-alih filePath dalam metode getFile. Di sini saya tidak mendapatkan kesalahan apa pun tetapi file log tetap tidak dibuat. Saya memiliki semua izin di Android Manifest. Saya juga telah memberikan akses penyimpanan ke aplikasi Ionic Cordova saya. Mengapa saya tidak dapat membuat file log di penyimpanan internal perangkat saya?
Sunting 1: Saya juga sudah mengujinya di Marshmallow. Pada kode ke-2 ini berlaku untuk semua blok, tidak ada kesalahan tetapi file log tetap tidak dibuat