Всем привет, с вами снова сайт scriptcoding.ru. Продолжая изучать объект FileSystemObject, мы рассмотрим метод OpenTextFile, который показывает, как открыть текстовый файл программным путем.
Прежде всего, стоит определиться, как открыть текстовый файл средствами операционной системы Windows. Дело в том, что файлы, как правило, делятся на два типа: текстовые и двоичные. Двоичные – в большинстве случаев это исполняемые файлы с расширение exe, bat и так далее. Для текстовых документов актуальным являются такие моменты как кодировка, перевод строки и так далее. Если брать простой текстовый документ с расширением txt, то его можно открыть простым редактором Блокнот, а вот для корректного отображения документа с расширением doc, нужно как минимум приложение Microsoft Word. В общем, все зависит от расширения текстового файла, хотя для простоты дела, вы можете выбрать документ в менеджере Total Commander и нажать клавишу F3.
Как открыть текстовый файл
Хорошо, теперь вернемся к методу, который показывает, как открыть заданный текстовый файл. Метод fso OpenTextFile является переходным звеном, так как он позволяет получить доступ к текстовому файлу (возможность считывания данных и открытие документа). Давайте рассмотрим параметры метода OpenTextFile FSO объекта:
OpenTextFile(filename [,iomode [,create [,format]]]) – После вызова метода, он автоматически предоставляет доступ к объекту Textstream. Давайте рассмотрим описание параметров:
- filename – собственно, путь к текстовому файлу. В принципе, мы можем задать путь к любому файлу.
- iomode – отвечает за режим доступа, например, ForReading — только чтение (1), ForWriting — для записи (2), ForAppending — для добавления (8).
- Create — параметр определяет, что делать, если файл с подобным именем не существует (параметр filename): true – документ создастся, false – документ создаваться не будет.
- format – задает кодировку: TristateUseDefault – формат системы по умолчанию (-2), TristateTrue — формат Unicode (-1), TristateFalse – формат ASCII (0).
Хорошо, теперь давайте приступим к программированию, а именно, рассмотрим, как можно открыть текстовый файл программным путем. Мы рассмотрим два примера, один на языке VBScript, а другой на языке Jscript. Начнем с языка программирования vbscript:
' ---------------------------------------------------------- ' Объект FileSystemObject метод OpenTextFile ' Как открыть текстовый файл ' OpenTextFile.vbs ' ---------------------------------------------------------- Option Explicit dim FSO, WshShell, Folder, Files, Folders, TempPath, TxtFile dim cur_dir, list, i, j, result, t_file, data_file Set FSO = CreateObject("Scripting.FileSystemObject") ' формируем ссылку на объект set WshShell = WScript.CreateObject("WScript.Shell") ' текущий каталог cur_dir = WshShell.CurrentDirectory list = "Содержимое текущей папки:" & vbCrLf & vbCrLf 'Создаем объект Folder для для текущей папки set Folder=FSO.GetFolder(cur_dir) 'Создаем коллекцию файлов set Files=Folder.Files 'Создаем коллекцию каталогов set Folders=Folder.SubFolders list = list & "Список файлов:" & vbCrLf & vbCrLf ' начинаем перебор коллекции файлов как открывать текстовые файлы For Each i In Files ' формируем список файлов list = list & i.Name & vbCrLf Open_Text_File(i.Path) Next list = list & vbCrLf & "Список катлогов:" & vbCrLf & vbCrLf ' начинаем перебор коллекции папок For Each j In Folders ' формируем список каталогов list = list & j.Name & vbCrLf Next ShowInNotepad(list) 'Процедура открытия текстового файла Sub Open_Text_File(file_path) result = MsgBox("Хотите открыть документ " & file_path, vbOkCancel + vbInformation, "Открытие файла") If result = vbOK Then set t_file=fso.OpenTextFile(file_path, 1, false) data_file = t_file.ReadAll t_file.Close() ShowInNotepad(data_file) End If End Sub 'Процедура создания временного файла с данными Sub ShowInNotepad(StrToFile) TempPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%") & "\" & FSO.GetTempName Set TxtFile = FSO.CreateTextFile(TempPath) TxtFile.WriteLine(StrToFile) TxtFile.Close CreateObject("WScript.Shell").Run "wordpad.exe " & TempPath End Sub |
Давайте начнем с конца, видим, что мы создали две процедуры:
Open_Text_File – в качестве параметра принимает строковое значение, путь к документу, который нужно открыть. В самой процедуре мы выводим диалоговое окно с помощью функции MsgBox, если пользователь нажмет на ОК, то произойдет вызов метода OpenTextFile (fso.OpenTextFile), считывание содержимого документа (ReadAll), закрытие документа и вызов процедуры ShowInNotepad. Как открывать текстовый файл.
ShowInNotepad – процедура принимает один параметр – данные, которые нужно записать. Сначала создается временный текстовый файл, его расширение будет tmp, в него будут записаны данные параметра. В конце происходит вызов метода Run объект WScript.Shell, который произведет открытие временного файла с помощью программы wordpad.exe, вы вправе изменить текстовый редактор на любой другой.
А вот аналогичный пример на языке Jscript:
// ---------------------------------------------------------- // Объект FileSystemObject метод OpenTextFile // Как открыть текстовый файл // OpenTextFile.js // ---------------------------------------------------------- var FSO, WshShell, Folder, Files, Folders, TempPath, TxtFile; var cur_dir, list = "Содержимое текущей папки:\n\n"; FSO = WScript.CreateObject("Scripting.FileSystemObject"); // формируем ссылку на объект WshShell = WScript.CreateObject("WScript.Shell"); // текущий каталог cur_dir = WshShell.CurrentDirectory; //Создаем объект Folder для для текущей папки Folder=FSO.GetFolder(cur_dir); //Создаем коллекцию файлов Files=new Enumerator(Folder.Files); //Создаем коллекцию каталогов Folders=new Enumerator(Folder.SubFolders); list += "Список файлов:\n\n"; // начинаем перебор коллекции файлов for (; !Files.atEnd(); Files.moveNext()){ list+=Files.item().Name+"\n"; Open_Text_File(Files.item().Path) } list += "\nСписок катлогов:\n\n"; // начинаем перебор коллекции папок как открывать текстовые файлы for (; !Folders.atEnd(); Folders.moveNext()){ list+=Folders.item().Name+"\n"; } ShowInNotepad(list); //Функция открытия текстового файла function Open_Text_File(file_path){ var Msg = "Хотите открыть документ " + file_path; var Titl = "Открытие файла"; var result, t_file, data_file; var vbOKCancel = 1; var vbOK = 1; var vbInformation = 64; result = WshShell.Popup(Msg, 0, Titl, vbOKCancel + vbInformation); if (result == vbOK) { t_file=FSO.OpenTextFile(file_path, 1, false); data_file = t_file.ReadAll(); t_file.Close(); ShowInNotepad(data_file); } } //Функция создания временного файла с данными function ShowInNotepad(StrToFile){ TempPath = WScript.CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%") + "\\" + FSO.GetTempName(); TxtFile = FSO.CreateTextFile(TempPath); TxtFile.WriteLine(StrToFile); TxtFile.Close(); WScript.CreateObject("WScript.Shell").Run ("wordpad.exe " + TempPath); } |
И так, мы рассмотрели метод OpenTextFile объекта FileSystemObject, который показывает как открыть текстовый файл. Если у вас возникли вопросы по сценарию, пишите в комментариях, буду рад ответить.
Здравствуй Владимир! Помоги, пожалуйста, разобраться с различными кодировками. Например, нужно текстовые файлы переводить из DOS в WIN-1251 и наоборот. Ничего внятного Интернет не дает. Встроенных функций я так и не нашел. И вообще, благодарю тебя за сайт и информацию!!!!!
Если не ошибаюсь, то поставленную задачу можно решить с помощью объекта ADODB.Stream. Я просто с ним не работал, поэтому и не описывал. Описание на MSDN. msdn.microsoft.com/en-us/library/windows/desktop/ms677486%28v=vs.85%29.aspx