Метод moveTo() требует в качестве входных параметров два объекта Entry: первый соответствует файлу, над которым выполняется операция, а второй представляет собой каталог, в который файл будет перемещен. Таким образом, сначала нужно создать ссылку на файл, используя getFile(), а затем получить ссылку на целевой каталог с помощью getDirectory(). После этого можно вызывать moveTo(), передавая ему эту информацию.
Листинг 12.13. Перемещение файлов
Function initiate(){
Databox=document. getElementById(‘databox’); var button=document. getElementById(‘fbutton’); button. addEventListener(‘click’, modify, false);
Window. webkitRequestFileSystem(window. PERSISTENT, 5*1024*1024, createhd, showerror);
}
Function createhd(fs){ hd=fs. root; path=»; show();
}
Function showerror(e){ alert(‘0i^6Ka: ‘+e. code);
}
Function modify(){
Var origin=document. getElementById(‘origin’).value;
Var destination=document. getElementById(‘destination’).value;
Hd. getFile(origin, null, function(file){
Hd. getDirectory(destination, null, function(dir){
Продолжение &
File. moveTo(dir, null, success, showerror);
},showerror);
},showerror);
}
Function success(){
Document. getElementById(‘origin’).value=»;
Document. getElementById(‘destination’).value=»;
Show();
}
Function show(){
Databox. innerHTML=»;
Hd. getDirectory(path, null, readdir, showerror);
}
Function readdir(dir){
Var reader=dir. createReader(); var read=function(){
Reader. readEntries(function(files){
If(files. length){
List(files);
Read();
}
}, showerror);
}
Read();
}
Function list(files){
For(var i=0; i<files. length; i++) { if(files[i].isFile) {
Databox. innerHTML+=files[i].name+'<br>’;
}else if(files[i].isDirectory){ databox. innerHTML+='<span onclick="changedir(»+ files[i].name+»)" class="directory">+’+ files[i].name+'</span><br>’;
}
}
}
Function changedir(newpath){ path=path+newpath+’/’; show();
}
Window. addEventListener(‘load’, initiate, false);
Для создания или открытия файловой системы и вывода на экран списка записей мы использовали функции из предыдущих примеров.
Единственная новая функция в листинге 12.13 — это modify(). Она принимает значения из полей Источник и Цель нашей формы и с учетом этой информации открывает сначала файл-источник, а затем, в случае успеха, — целевой каталог. Если обе операции завершаются успешно, то для объекта file вызывается метод moveTo() и файл перемещается в каталог, путь к которому хранится в переменной dir. Если и эта операция выполняется успешно, то происходит вызов функции success() для очистки полей формы, а затем функция show() обновляет на экране список записей.
Для тестирования этого примера вам потребуются HTML-файл с шаблоном из листинга 12.12, CSS-файл, который мы использовали с самого начала главы, и файл под названием file. js с кодом из листинга 12.13 (не забудьте перед проверкой загрузить файлы на свой сервер). Создайте в своей файловой системе файлы и каталоги, для того чтобы вам было с чем работать.
Для этого можно применить предыдущие примеры кода. Затем воспользуйтесь формой из последнего HTML-документа: укажите имя файла для перемещения (полный путь, начиная с корня) и имя каталога, в который нужно переместить файл (если этот каталог находится в корне файловой системы, то косую черту добавлять не требуется, достаточно имени каталога).
Добавить комментарий