Страницы: 1
Необходимо сохранить загружаемый файл, для этого прежде всего создаю его:
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); file.initWithPath(destinationfullpath); if( !file.exists() || !file.isFile() ) { file.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644) }; var fileURI = ioService.newFileURI(file);
код работает нормально, если кодировка имени файла английская или совпадает с кодовой страницей ОС. В противном случае (имя файла в юникоде) подучаю ошибку:
[Exception... "Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsILocalFile.create]" nsresult: "0x80070057 (NS_ERROR_ILLEGAL_VALUE)
Как обойти эту ошибку и таки создать файл?
Отсутствует
Какой путь-то?
Я сейчас вот такое проверил:
var path = "D:\\æƠɫφՔẲ㋻㍼"; var file = Components.classes["@mozilla.org/file/local;1"] .createInstance(Components.interfaces.nsILocalFile); file.initWithPath(path); file.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644);
Работает.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Сохраняю в темп
Отсутствует
Такое у меня тоже работает, в том числе и в Firefox 10.0.11.
Возможно, от операционной системы зависит.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Хмм... А файл создаётся?
Добавил два алерт-а - до и после создания файла. Первый появляется (но имя файла пишет знаками вопроса - может в этом проблема?), а второй нет - сразу срабатывает алерт из последней строки - ловит ошибку.
Специально кодировку имени файла я никак не обозначал - скорее всего она получается UTF-16 Little Endian.
try {' var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); file.initWithPath(destinationfullpath); alert(destinationfullpath); file.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644); alert(destinationfullpath); }catch(e){alert(e);}'
-------
Уря! Сконвертировал имя файла в UTF-8 и всё заработало!
Отредактировано Iczer (18-02-2014 20:13:44)
Отсутствует
Страницы: 1