На самом деле есть способ сделать это, но он доступен только в Google Chrome и в основном для приложений HTML5, упакованных как расширения. Есть планы сделать его доступным в более широких дистрибутивах, но пока не совсем там . Он называется FileSystem API . Вот пример, с которым я недавно играл -
// test HTML5 file system API
function onInitFs(fs){
console.log("Opened file system " + fs.name);
}
function errorHandler(){
var msg = '';
switch(e.code){
case FileError.QUOTA_EXCEEDED_ERR:
msg = 'QUOTA_EXCEEDED_ERR';
break;
case FileError.NOT_FOUND_ERR:
msg = 'NOT_FOUND_ERR';
break;
case FileError.SECURITY_ERR:
msg = 'SECURITY_ERR';
break;
case FileError.INVALID_STATE_ERR:
msg = 'INVALID_STATE_ERR';
break;
default:
msg = 'Unknown Error';
break;
};
console.log('Error: ' + msg);
}
window.requestFileSystem(
window.TEMPORARY,
5*1024*1024 /*5MB*/,
onInitFs,
errorHandler
);
// create empty file called log.txt
// throws an error e is not defined
function onInitFs(fs){
fs.root.getFile(
'log.txt',
{
create: true,
exclusive: true
},
function(fileEntry){
console.log('fileEntry.isFile = ' + fileEntry.isFile);
console.log('fileEntry.name = ' + fileEntry.name);
console.log('fileEntry.fullPath ' + fileEntry.fullPath);
},
errorHandler
);
}
function errorHandler(){
var msg = '';
switch(e.code){
case FileError.QUOTA_EXCEEDED_ERR:
msg = 'QUOTA_EXCEEDED_ERR';
break;
case FileError.NOT_FOUND_ERR:
msg = 'NOT_FOUND_ERR';
break;
case FileError.SECURITY_ERR:
msg = 'SECURITY_ERR';
break;
case FileError.INVALID_STATE_ERR:
msg = 'INVALID_STATE_ERR';
break;
default:
msg = 'Unknown Error';
break;
};
console.log('Error: ' + msg);
}
window.requestFileSystem(
window.TEMPORARY,
5*1024*1024,
onInitFs,
errorHandler
);
// simple debugging
window.requestFileSystem(
window.TEMPORARY,
5*1024*1024,
function(fs){
console.dir(fs.root);
fs.root.getFile('log.txt');
},
function(error){
console.dir(error);
}
);