Шаг 60.
Основы JavaScript.
Работа с папками. Создание папки

    На этом шаге мы рассмотрим создание папок.

    Для создания папки можно использовать следующий код:

  var fso = new ActiveXObject("Scripting.FileSystemObject");
  fso.CreateFolder(folderpath);

    fso.CreateFolder(folderpath) создает указанную папку и возвращает ссылку на нее, если операция прошла успешно, в противном случае выводится диалоговое окно с сообщением об ошибке.

    folderpath - строка, содержащая полный путь к создаваемой папке, например "С:\\Мои документы\\моя папка". При указании пути требуется использовать двойные слэши. Для выполнения с помощью WSH вместо первого выражения можно использовать и такое:

  var fso = WScript.CreateObject("Scripting.FileSystemObject");

    Если требуется создать папку, то необходимо, чтобы существовали все папки более высокого уровня, лежащие на пути к создаваемой папке и указанные в параметре folderpath. Кроме того, диск, на котором создается папка, должен быть записываемым и готовым к работе. Например, это не может быть устройство для чтения компакт-дисков, а если это гибкий диск, то он должен быть вставлен в дисковод. Если папка, указанная в folderpath, уже существует, то ее нельзя создавать. Таким образом, чтобы создать папку, предварительно следует выполнить ряд проверок. В противном случае, при невыполнении оговоренных выше условий, появится диалоговое окно с сообщением об ошибке.

    Ниже приведен код функции createFolder(folderpath), которая выполняет все необходимые проверки. Более того, если какие-нибудь папки на пути к конечной папке не существуют, то функция создаст их.

    Код функции createFolder(folderpath):

// Создание папки. Возвращает -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);
}

    Результат работы этой функции приведен на рисунках 1 и 2.


Рис.1. Папка с заданным именем отсутствует


Рис.2. Папка с указанным именем существует

    Приведем полный текст HTML-документа.

<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);
}
function f1(x)
{
  if (createFolder(x)== -1)
      alert ("Папка с таким именем уже существует");
  else alert ("Папка создана");
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<H2>Создание папки</H2>
<FORM NAME="frm1">
<INPUT TYPE="TEXT" SIZE="30" VALUE="C:\\Мои документы\\Test" NAME="pole"><BR>
<INPUT TYPE="BUTTON" ONCLICK="f1(frm1.pole.value)" VALUE="Создать папку">
</FORM>
</BODY>
</HTML>
Текст этого документа можно взять здесь.

    Здесь дополнительно проверяется наличие свободного пространства на диске. В этом примере устанавливаем, чтобы диск имел минимум 1 Кбайт свободного места, чтобы разрешить создание папки. Вы можете задать и другую пороговую величину или отменить эту проверку совсем.

    На следующем шаге мы рассмотрим другие операции над папками.




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