Создание файлов при помощи 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 и т. д. и т.п. На этой оптимистической ноте я заканчиваю.
Спасибо за внимание.
Оставить комментарий
Оставлять комментарии могут только зарегистрированные пользователи.
Если вы не являетесь зарегистрированным пользователем, то вам необходимо зарегистрироваться. Регистрация бесплатна. Если вы уже зарегистрированы на CodeNet, то вам необходимо ввести логин и пароль в верхней (Alt-U) части страницы.
Комментарии
1. uint32 / 28 мая 2008, 00:48:30

Извиняюсь. Оказывается для предыдущего примера расширение не обязательно.

Нашел еще код для оперы:
s.print(content);
s.close();
Методы приведенные в примерах - свои для каждого браузера. Тот, что приводится в статье, годится только для ie.
2. uint32 / 27 мая 2008, 23:47:10

Нашел способ, как создавать файлы из Firefox(без всякого ActiveX)

Надо установить расширение:
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"); }
3. blind rain / 06 декабря 2005, 08:21:27+1 / -0

duke_nukem

что касается настроек "по умолчанию", то доверяй - но проверяй. Где и что - для конкретно этого случая - я написал.
skunk
<blockquote><small>Цитата:<hr size=1>причем тут ActiveX ни как не пойму...[/quote]
Ну а чем по-Вашему файл пишется? Поддержка скриптов в браузерах пощипанная на такие вещи. ActiveX компонент Scripting.FileSystemObject в общем-то для внутренних административных нужд в основном используется, у него и флаг внутрях - что небезопасный он. Но если пользователь по глупости (или по рекомендации "доброжелателя" на каком нибудь ресурсе для "лучшего" отображения содержимого страниц) включит себе настройки по запуску ActiveX в зоне Internet - то вообще все что угодно с его машиной сделать можно.
4. duke_nukem / 06 декабря 2005, 06:35:38

ActiveX тут почти ни причем...

...бесполезность (и не только на первый взгляд) этого поста в том, что при запуске этого кода с локальной страницы (с жесткого диска) выскакивает предупреждение о небезопасной операции, а при запуске из и-нета ваще молча ничего не делает (при настройках безопасности "по умолчанию")...
5. skunk / 05 декабря 2005, 19:40:55

blind rain

причем тут ActiveX ни как не пойму...
6. blind rain / 05 декабря 2005, 13:32:59+2 / -0

Вывод: запрещайте в настройках безопасности браузера использование (а также закрузку и запуск) неподписанных ActiveX элементов, а лучше - вообще всех ActiveX элементов для зоны интернет, если не хотите, чтобы каждый "в мирных целях" имел ваш "винт" как свой собственный... 

