На этом шаге мы рассмотрим основные операции над файлами.
Для операций копирования, перемещения, переименования и удаления файлов имеются методы объекта FSO и методы объекта файла.
var fso = new ActiveXObject("Scripting.FileSystemObject"); // Объект FSO var file = fso.GetFile (filepath1); // Объект файла // Методы копирования filepath1 в filepath2 file.Copy(filepath2); fso.CopyFile(filepath1, filepath2); // Методы перемещения filepath1 в filepath2 file.Move(filepath2); fso.MoveFile(filepath1, filepath2); // Методы удаления filepath1 file.Delete(filepath1); fso.DeleteFlie(filepath1);
Также как и в случае с папками, методы копирования и удаления имеют еще один необязательный параметр. Так, значение true этого параметра в методах копирования обеспечивает перезапись уже существующего файла с тем же именем, а в методах удаления - удаление файлов, предназначенных только для чтения. Перечисленные выше операции могут применяться к любым файлам, а не только к текстовым.
В следующем примере создается текстовый файл testfile.txt в папке С:\Мои документы, затем этот файл перемещается в папку C:\Windows\Temp, и копируем в корневую папку на диске С. В заключении он удаляется из обеих папок.
var fso = new ActiveXObject("Scripting.FileSystemObject"); var f1 = fso.CreateTextFile ("C:\\Мои дoкyмeнты\\testfile.txt"); f1.Close(); // Закрываем файл // Получаем ссылку на файл f1 = fso.GetFile("C:\\Мои дoкyмeнты\\testfile.txt"); // Перемещаем файл в папку C:\Windows\Temp f1.Move("C:\\Windows\\Temp\\testflie.txt"); // Получаем ссылку var f2= fso.GetFile("C:\\Windows\\Temp\\testfile.txt"); // Копируем файл в папку С:\ f2.Copy("C:\\testfile.txt"); // Получаем ссылки на файлы: f1 = fso.GetFile("C:\\Windows\\Temp\\testfile.txt"); f2 = fso.GetFile("C:\\testfile.txt"); // удаляем файл С:\Windows\Temp\testfile.txt f1.Delete(); // удаляем файл C:\testfile.txt f2.Delete();
Результат выполнения этих действий приведен на рисунке 1.
Рис.1. Результат создания, перемещения и удаления файлов
Приведем полный текст приложения.
<HTML> <HEAD> <TITLE>Создание файла</TITLE> <SCRIPT LANGUAGE="JavaScript"> <!-- /* Создание папки. Возвращает -1, если папка создана или */ /* существует, 0 - в противном случае */ function createFolder(folderpath) { var fso = new ActiveXObject("Scripting.FileSystemObject"); var disk = fso.GetDriveName(folderpath); // Имя (буква) диска // Проверка характеристик диска: if (!fso.DriveExists(disk)) return 0 // ...если диск не существует if (!fso.GetDrive(disk).IsReady) return 0 // ...если диск не готов // ...если не подходит тип диска if (fso.GetDrive(disk).DriveType == 0 || fso.GetDrive(disk).DriveType == 4) return 0; if (fso.GetDrive(disk).FreeSpace < 1024) return 0; // ...если мало места if (fso.FolderExists(folderpath)) return -1; // Если папка уже существует, // то не создаем ее var apath = folderpath.split("\\"); // Преобразуем в массив имен папок for (i = 1; i<apath.length; i++) { disk+= "\\" + apath[i]; if (!fso.FolderExists(disk)) // Если папка не существует, fso.CreateFolder(disk); // то создаем ее } //Bозвращаем результат проверки существования созданной папки return fso.FolderExists(folderpath); } // Создание текстового файла. Возвращает ссылку на // созданный файл или 0, если файл не создан function files(filepath) { var fso = new ActiveXObject("Scripting.FileSystemObject"); var i = filepath.lastIndexOf("\\"); // Выделяем имя файла из filepath if (i>=0) file = filepath.substr(i+1); // Выделяем путь к файлу без имени файла var folder = filepath.slice(0, i); // Проверки и создание недостающих папок if (!createFolder(folder)) return 0; // Если файл существует, то... if (fso.FileExists(file)) // ...открываем его для записи f1 = fso.OpenTextFile(filepath, 2); else // ...иначе создаем файл и возвращаем ссылку на него f1 = fso.CreateTextFile(folder + "\\" + file); f1.Close(); // Закрываем файл // Получаем ссылку на файл f1 = fso.GetFile(folder + "\\" + file); // Перемещаем файл в папку C:\Windows\Temp f1.Move("C:\\Windows\\Temp\\testfile.txt"); // Получаем ссылку var f2= fso.GetFile("C:\\Windows\\Temp\\testfile.txt"); // Копируем файл в папку С:\ f2.Copy("C:\\testfile.txt"); // Получаем ссылки на файлы: f1 = fso.GetFile("C:\\Windows\\Temp\\testfile.txt"); f2 = fso.GetFile("C:\\testfile.txt"); // Удаляем файл С:\Windows\Temp\testfile.txt f1.Delete(); // Удаляем файл C:\testfile.txt f2.Delete(); } function f1(x) { files(x); alert ("Все действия выполнены"); } //--> </SCRIPT> </HEAD> <BODY> <H2>Создание файла</H2> <FORM NAME="frm1"> <INPUT TYPE="TEXT" SIZE="40" VALUE="C:\\Мои документы\\textfile.txt" NAME="pole"><BR> <INPUT TYPE="BUTTON" ONCLICK="f1(frm1.pole.value)" VALUE="Действия с файлами"> </FORM> </BODY> </HTML>
Копировать, перемещать или удалять можно только закрытые файлы. Поскольку после операции создания файла он остается открытым, нам пришлось использовать метод Close().
Прежде чем копировать и перемещать файлы, необходимо проверить, возможны ли данные операции. Следует проверить, существует и готов ли диск, достаточно ли свободного места на нем, существуют ли все папки, указанные в пути к файлу. Требуется также решить, что делать, если копируемый или перемещаемый файл уже создан в месте назначения.
Некоторые из этих проверок следует выполнять и перед удалением файла. Отчасти эта задача аналогична созданию и удалению папки.
Значение объема (размера) файла в байтах содержится в свойстве Size объекта файла. В следующем примере мы узнаем объем файла C:\autoexec.bat:
var fso = new ActiveXObject("Scripting.FileSystemObject"); // Cсылка на объект файла var f1 = fso.GetFile ("C:\\autoexec.bat"); // Объем файла С:\autoexec.bat var size = f1.Size; // Вывод окна с сообщением об объеме файла alert(size);
Значение свойства Sizе объекта файла нужно сравнить со значением свойства FreeSpace объекта диска, чтобы выяснить, достаточно ли места для записи файла.
На следующем шаге мы рассмотрим чтение из файла.