Создание файлов при помощи JavaScript и VBScript
1. Создание пустого файла
На первый взгляд эта функция может показаться бесполезной, однако, как вы занесете данные в файл, не имея самого файла, не будем же мы портить фалы посетителя нашей страници.
Для того, чтобы создать пустой файл с помощью VBSctipt надо написать в HTML-файле следующий код:
<script language="VBScript"> Dim fso, f1 Set fso = CreateObject("Scripting.FileSystemObject") Set f1 = fso.CreateTextFile("c:\testfile.txt", True) </script>
Ту же самую функцию выполняет и следующий код, написанный уже на JavaScirpt:
<script language="JavaScript"> var fso, f1; fso = new ActiveXObject("Scripting.FileSystemObject"); f1 = fso.CreateTextFile("c:\\testfile.txt", true); </script> Вот теперь, создав чистый файл, можно приступить к его заполнению...
2. Запись данных в файл
Открытие файла. Для того, чтобы открыть файл надо применить следующий скрипт:
Dim fso, ts Const ForWriting = 2 Set fso = CreateObject("Scripting. FileSystemObject") Set ts = fso.OpenTextFile("c:\test.txt", ForWriting, True)
Данный скипт написан на VBScript. Здесь по-моему все понятно. ForWriting - флаг, показывающий зачем открывать файл. Вот тот же скрипт на JavaScript:
var fso, ts; var ForWriting= 2; fso = new ActiveXObject("Scripting.FileSystemObject"); ts = fso.OpenTextFile("c:\\test.txt", ForWriting, true);
Надо отметить, что при этом файлы будут автоматически создаваться.
Непосредственная запись в файл. Для занесения строчек текста в файл используется следующие методы:
Задача | Метод |
Вставка новой строки, с последующей возможностью добавления в этуже строку данных, т.е. в конце строки нет символов переноса строки и возврата каретки. | Write |
Вставка новой строки с переносом на следующую. | WriteLine |
Вставка одной или несколких пустых строк. | WriteBlankLines |
Вот примеры скриптов. На VBScript:
Sub CreateFile() Dim fso, tf Set fso = CreateObject("Scripting.FileSystemObject") Set tf = fso.CreateTextFile("c:\testfile.txt", True) ' Вставка строки с переносом на новую. tf.WriteLine("Testing 1, 2, 3.") ' Вставка 3 путых строк. tf.WriteBlankLines(3) ' Вставка новой строки, без переноса. tf.Write ("This is a test.") ' Закрытие файла. tf.Close End Sub
На JavaScript:
function CreateFile() { var fso, tf; fso = new ActiveXObject("Scripting.FileSystemObject"); tf = fso.CreateTextFile("c:\\testfile.txt", true); // Вставка строки с переносом на новую. tf.WriteLine("Testing 1, 2, 3.") ; // Вставка 3 пустых строк. tf.WriteBlankLines(3) ; // Вставка новой строки, без переноса. tf.Write ("This is a test."); ' Закрытие файла. tf.Close(); }
Вот и все. Что с этим делом делать, вы наверное уже знаете. В мирных целях эта возможность создавать файлы на клиентских машинах очень полезна. Можно предложить посетителю скачать ваш фирменных значок и установить его в кчестве значка дика C, D, E, F, ..., Z. Можно создать autorun для диска X, в котором будет прописана строка, которая позволит загружать ваш фирменный сайт при запуске этого диска. Сохранение настроек без использования cookies и т. д. и т.п. На этой оптимистической ноте я заканчиваю.
Спасибо за внимание.
Оставить комментарий
Комментарии
Нашел еще код для оперы:
s.print(content);
s.close();
Методы приведенные в примерах - свои для каждого браузера. Тот, что приводится в статье, годится только для ie.
Надо установить расширение:
http://downloads.mozdev.org/jslib/xpi/signed/jslib_current_signed.xpi
Код такой:
try {
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
//проверяем ОС
if(navigator.userAgent.indexOf("Win") != -1)
{file.initWithPath("c:\\foo.dat");}
else
{file.initWithPath("/foo.dat");}
if (!file.exists())
file.create(file.NORMAL_FILE_TYPE, 0644);
var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
var uri = ioService.newFileURI(file);
var channel = ioService.newChannelFromURI(uri);
var outputStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
outputStream.init(file, 0x20|0x02, 00004, null);
var buffer = "This is a test\n";
outputStream.write(buffer, buffer.length);
outputStream.flush();
outputStream.close();
} catch (e) { document.write("<html><body>err"); }
что касается настроек "по умолчанию", то доверяй - но проверяй. Где и что - для конкретно этого случая - я написал.
skunk
<blockquote><small>Цитата:<hr size=1>причем тут ActiveX ни как не пойму...[/quote]
Ну а чем по-Вашему файл пишется? Поддержка скриптов в браузерах пощипанная на такие вещи. ActiveX компонент Scripting.FileSystemObject в общем-то для внутренних административных нужд в основном используется, у него и флаг внутрях - что небезопасный он. Но если пользователь по глупости (или по рекомендации "доброжелателя" на каком нибудь ресурсе для "лучшего" отображения содержимого страниц) включит себе настройки по запуску ActiveX в зоне Internet - то вообще все что угодно с его машиной сделать можно.
...бесполезность (и не только на первый взгляд) этого поста в том, что при запуске этого кода с локальной страницы (с жесткого диска) выскакивает предупреждение о небезопасной операции, а при запуске из и-нета ваще молча ничего не делает (при настройках безопасности "по умолчанию")...
причем тут ActiveX ни как не пойму...