Я возился с бесплатным редактором Chrome Dev Editor на своем Chromebook. Я пытаюсь использовать fileSystem
для чтения и записи файлов .txt. Все очень запутано, совсем не так, как в C. Я уже не могу сказать, разрешено ли мне вообще что-то делать, не говоря уже о том, где нужно узнать, как это сделать.
Я думаю, что файлы, которые я вижу с помощью файлов, находятся в песочнице, в которой мне разрешено играть (имеются в виду папки, доступные для приложения?). Корень называется «Загрузки». Разумеется, если я использую все точечные вызовы и аргументы обратного вызова для чтения, как в примерах на сайте developer.chrome.com/apps/filesystem, это работает. Но я должен каждый раз получать приглашение как для чтения, так и для записи.
Еще немного Google придумал этот трюк: (я думаю, что это было здесь, в stackoverflow, на самом деле) вызов chrome.runtime
, getPackagedDirectoryEntry
, который, кажется, дает мне дескриптор папки моего приложения. Большой! Это все, что мне нужно, чтобы не проходить подсказки. Во всяком случае, для файла чтения.
Но тогда попытка применить тот же трюк к файлу записи не сработала. На самом деле, он не сделал ничего заметного. Никаких ошибок, никаких нареканий. Ничего. Несмотря на то, что файл записи с подсказками работает нормально (поэтому, предположительно, у меня есть разрешения и право на создание BLOB-объектов). Что делать?
Вот мой код:
function test(){
// Samsung 303C Chromebook - Chrome Dev Editor - /Downloads/Daily/main.js
// prompted write
chrome.fileSystem.chooseEntry({type:'saveFile'},function(a){
a.createWriter(function(b){
b.write(new Blob(["Programming fun"],{type:'text/plain'}));
},function(e){trace.innerText = 'error is ' + e;});
});
// unprompted read
chrome.runtime.getPackageDirectoryEntry(function(a){
a.getFile('text.txt',{},function(b){
b.file(function(c){
var d = new FileReader();
d.onloadend = function(){trace.innerText = this.result;};
d.readAsText(c);
});
});
});
// unprompted write - why not?
chrome.runtime.getPackageDirectoryEntry(function(a){
a.getFile('new.txt',{create:true},function(b){
b.createWriter(function(c){
c.write(new Blob(["Miss Manners fan"],{type:'text/plain'}));
},function(e){trace.innerText = 'error is ' + e;});
});
});
}