Полезная информация

Многие проблемы быстрее решаются поиском по форуму и чтением FAQ, чем созданием новой темы и томительным ожиданием ответа.

№106-09-2015 14:51:24

Medison1
Участник
 
Группа: Members
Зарегистрирован: 05-09-2015
Сообщений: 11
UA: Firefox 40.0

Удалить файл/папку ; Выбрать файл/папку

Добрый день.

1) Можно удалить файл, используя код:

Выделить код

Код:

function delete_file_by_path(delpath)
{var file = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(delpath);
if (file.exists()) file.remove(false);}

delete_file_by_path (delpath); //Активируем

Вопрос - можно ли удалить папку?
По крайней мере этим же кодом сделать этого не получилось. Подозреваю что все дело в .nsILocalFile, но чего-то похожего на .nsILocalFolder не нашел.

2) Так же к примеру мне нужно открыть стандартное окно для выбора файла, чтобы получить путь к файлу. Это делаю кодом:

Выделить код

Код:

var chosenpath; // В этой переменной будет путь к файлу
function getpatch(dialogtitle) 
{var nsIFilePicker = Components.interfaces.nsIFilePicker;
var fp = Components.classes["@mozilla.org/filepicker;1"]
        .createInstance(nsIFilePicker);
fp.init(window, dialogtitle, nsIFilePicker.modeOpen);
var rv = fp.show();
if (rv == nsIFilePicker.returnOK) {chosenpath = fp.file.path;}}

Можно ли открыть такое же стандартное окно, но для выбора не файла, а папки?
Иначе приходится выбирать файл в нужной папке, а потом обрезать строку. Плюс возникает проблема, если в нужной папке нет файлов которые можно вручную выбрать.

Отредактировано Medison1 (06-09-2015 14:52:23)

Отсутствует

 

№206-09-2015 17:11:25

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2148
UA: Firefox 38.0

Re: Удалить файл/папку ; Выбрать файл/папку

Сейчас попробовал на FF40.
Папка была выбрана и удалена без проблем.

Выделить код

Код:

var picker = window.makeFilePicker();
picker.init(window, "", picker.modeGetFolder);
picker.open(result => result == picker.returnOK && picker.file.remove(true));

Отредактировано Dumby (06-09-2015 17:52:01)

Отсутствует

 

№307-09-2015 16:26:06

Medison1
Участник
 
Группа: Members
Зарегистрирован: 05-09-2015
Сообщений: 11
UA: Firefox 40.0

Re: Удалить файл/папку ; Выбрать файл/папку

Код работает. Но не до конца его понимаю. Можете его объяснить для повышения уровня образованности?

К примеру я так понял, что .open это метод для открывания окна, аналог которого .show() и который сейчас не рекомендуется использовать?
А как прочитать вот эти условия? (result => result == picker.returnOK && picker.file.remove(true))

Перевел этот код в аналогичный, но более понятный для меня:

Выделить код

Код:

var nsIFilePicker = Components.interfaces.nsIFilePicker;
var foldp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
foldp.init(window, "", nsIFilePicker.modeGetFolder);
var rav = foldp.show();
if (rav == nsIFilePicker.returnOK) {
foldp.file.remove(true);}

В нем я могу записать в переменную выбранный путь .file.path, а как это сделать в вашем коде?

И самое главное! Можно ли как-то удалить папку просто подставив путь, т.е. без ее выбора в окне пользователем?
Файл так можно удалить. При удалении файла я использую .initWithPath(delpath), но как это прикрутить к папке...
Задать .file.path через переменную так же не удается, видимо нужно использовать только как-то с init....

Отсутствует

 

№407-09-2015 19:07:29

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2148
UA: Firefox 38.0

Re: Удалить файл/папку ; Выбрать файл/папку

К примеру я так понял, что .open это метод для открывания окна, аналог которого .show() и который сейчас не рекомендуется использовать?

Да.

А как прочитать вот эти условия? (result => result == picker.returnOK && picker.file.remove(true))

Arrow functions, && (Флэнаган).

Можно ли как-то удалить папку просто подставив путь, т.е. без ее выбора в окне пользователем?

У меня удаляется.

Выделить код

Код:

var path = "D:\\test";
var file = Components.Constructor("@mozilla.org/file/local;1", "nsILocalFile", "initWithPath")(path);
if (file.exists() && file.isDirectory()) file.remove(true);

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]