>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Чтение из файла без initwithpath http://forum.mozilla-russia.org/viewtopic.php?id=31926 |
N1PhANtoM > 02-03-2009 18:49:51 |
Граждане! Не подскажет ли кто способа чтения из файла без вызова initwithpath ? ибо этому методу не нравится путь, что я ввожу. возможно поможет относительный путь, но не смог понять как с ним работать. необходимо читать из компорта. Соответственно весь путь к файлу - это "Com1". любой язык программирования, да и просто коммандная строка съедает его в лет и замечательно читает оттуда, а FF3 и nsiLocalFile ругаются при вызове initwithpath. |
Forest > 03-03-2009 00:19:23 |
А чтение подразумевается разовое или постоянное? |
Crazy-EyE > 03-03-2009 03:51:56 |
Пример того, как выполнять команду используя cmd.exe Выделить код Код:var file = Components.classes["@mozilla.org/file/local;1"] .createInstance(Components.interfaces.nsILocalFile); // Initializing with full path to cmd.exe which should normally be in "ComSpec" environment variable file.initWithPath( Components.classes["@mozilla.org/process/environment;1"] .getService(Components.interfaces.nsIEnvironment) .get("ComSpec") ); // Using "start /D filedir file.exe" to run file.exe with "filedir" as current working dir var cmd = "start /D z:\\path\\ z:\\path\\sample.exe"; // Passing /C flag for cmd.exe to close after execution var args = ["/C", cmd]; var process = Components.classes["@mozilla.org/process/util;1"] .createInstance(Components.interfaces.nsIProcess); process.init(file); // Starting new process without waiting for its termination process.run(false, args, args.length); Кстати, нельзя даже запустить программу из директории в PATH. Надо иметь полный путь, т.е. фактически самому парсить переменные окружения или реестр (для всяких %SystemRoot%). Тем более не будет работать com1 |
N1PhANtoM > 03-03-2009 08:40:18 |
как то это все, простите, через задницу. мне тогда проще написать свое простейшее windows приложение, которое бы резидентно читало из com1 и выкладывало все в более доступный физический файл с нормально воспринимаемым именем, но хотелось бы найти способ читать именно из com1 чтобы было единообразие и одно расширение для *nix и windows систем. |
Forest > 05-03-2009 23:23:40 |
Crazy-EyE
У меня под Убунту такая передача аргументов не заработала - пришлось сначала делать командный файл, а уже потом его выполнять. N1PhANtoM
Есть такое
В принципе можно попробовать решить дело XPCOM. В принципе если это всё можно сделать из cmd - можно создать файл со скриптом прямо из расширения и работать с ним. |
Crazy-EyE > 06-03-2009 00:55:04 |
Естественно, cmd.exe только под винду. Просто я хотел показать фишку про ComSpec и то, что обязательно надо полный путь. Под линукс уже обсуждали. Думаю будет работать так (не тестировал): Выделить код Код:var file = Components.classes["@mozilla.org/file/local;1"] .createInstance(Components.interfaces.nsILocalFile); // Initializing with full path to cmd.exe which should normally be in "ComSpec" environment variable file.initWithPath("/bin/bash"); // Example, change to what you need var cmd = "ls"; // Passing -c flag to bash to execute command var args = ["-c", cmd]; var process = Components.classes["@mozilla.org/process/util;1"] .createInstance(Components.interfaces.nsIProcess); process.init(file); // Starting new process without waiting for its termination process.run(false, args, args.length); (В исходном примере для Windows была задача запустить программу в нужной директории, здесь мне было лень разбираться)
Да, бинарный XPCOM идеологически самый правильный вариант, просто много возни будет (поэтому обычно XPCOM стараются избежать). |
Forest > 06-03-2009 08:24:08 |
Crazy-EyE
Ну я подумал, что это и так очевидно, поэтому не стал про это распинаться - видимо ошибся.
А я тестировал - не работало. |
N1PhANtoM > 06-03-2009 11:35:19 |
оказалось что Com порт можно открыть не только но и "<любой путь>\Com1 " и нормально отрабатывает, всем спасибо. тема закрыта. |