Шаг 63.
Основы JavaScript.
Работа с файлами. Копирование, перемещение и удаление файла

    На этом шаге мы рассмотрим основные операции над файлами.

    Для операций копирования, перемещения, переименования и удаления файлов имеются методы объекта 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 объекта диска, чтобы выяснить, достаточно ли места для записи файла.

    На следующем шаге мы рассмотрим чтение из файла.




Предыдущий шаг Содержание Следующий шаг