Node.js - Файловая система

Node реализует файловый ввод-вывод, используя простые оболочки для стандартных функций POSIX. Модуль файловой системы узла (fs) можно импортировать, используя следующий синтаксис:

var fs = require("fs")

Синхронный против асинхронного

Каждый метод в модуле fs имеет как синхронную, так и асинхронную формы. Асинхронные методы принимают последний параметр как обратный вызов функции завершения и первый параметр функции обратного вызова как ошибку. Лучше использовать асинхронный метод вместо синхронного, так как первый никогда не блокирует программу во время ее выполнения, а второй блокирует.

пример

Создайте текстовый файл с именем input.txt со следующим содержанием -

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Давайте создадим файл js с именем main.js со следующим кодом -

var fs = require("fs");

// Asynchronous read
fs.readFile('input.txt', function (err, data) {
   if (err) {
      return console.error(err);
   }
   console.log("Asynchronous read: " + data.toString());
});

// Synchronous read
var data = fs.readFileSync('input.txt');
console.log("Synchronous read: " + data.toString());

console.log("Program Ended");

Теперь запустите main.js, чтобы увидеть результат -

$ node main.js

Проверьте вывод.

Synchronous read: Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Program Ended
Asynchronous read: Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

В следующих разделах этой главы приводится набор хороших примеров основных методов файлового ввода-вывода.

Открыть файл

Синтаксис

Ниже приведен синтаксис метода открытия файла в асинхронном режиме.

fs.open(path, flags[, mode], callback)

Параметры

Вот описание используемых параметров -

  • path - Это строка с именем файла, включая путь.

  • flags- Флаги указывают на поведение открываемого файла. Все возможные значения указаны ниже.

  • mode- Устанавливает режим файла (права доступа и липкие биты), но только если файл был создан. По умолчанию 0666, доступен для чтения и записи.

  • callback - Это функция обратного вызова, которая получает два аргумента (err, fd).

Флаги

Флаги для операций чтения / записи:

Sr.No. Флаг и описание
1

r

Открыть файл для чтения. Исключение возникает, если файл не существует.

2

r+

Открыть файл для чтения и записи. Исключение возникает, если файл не существует.

3

rs

Открыть файл для чтения в синхронном режиме.

4

rs+

Открыть файл для чтения и записи, попросив ОС открыть его синхронно. См. Примечания для 'rs' об использовании этого параметра с осторожностью.

5

w

Открыть файл для записи. Файл создается (если он не существует) или усекается (если он существует).

6

wx

Подобно 'w', но не работает, если путь существует.

7

w+

Открыть файл для чтения и записи. Файл создается (если он не существует) или усекается (если он существует).

8

wx+

Подобно 'w +', но не работает, если путь существует.

9

a

Открыть файл для добавления. Если файл не существует, он создается.

10

ax

Подобно 'a', но не работает, если путь существует.

11

a+

Открыть файл для чтения и добавления. Если файл не существует, он создается.

12

ax+

Подобно 'a +', но не работает, если путь существует.

пример

Давайте создадим файл js с именем main.js имеющий следующий код для открытия файла input.txt для чтения и записи.

var fs = require("fs");

// Asynchronous - Opening File
console.log("Going to open file!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
      return console.error(err);
   }
   console.log("File opened successfully!");     
});

Теперь запустите main.js, чтобы увидеть результат -

$ node main.js

Проверьте вывод.

Going to open file!
File opened successfully!

Получить информацию о файле

Синтаксис

Ниже приводится синтаксис метода получения информации о файле:

fs.stat(path, callback)

Параметры

Вот описание используемых параметров -

  • path - Это строка с именем файла, включая путь.

  • callback - Это функция обратного вызова, которая получает два аргумента (ошибка, статистика), где stats - это объект типа fs.Stats, который напечатан ниже в примере.

Помимо важных атрибутов, которые напечатаны ниже в примере, есть несколько полезных методов, доступных в fs.Statsкласс, который можно использовать для проверки типа файла. Эти методы приведены в следующей таблице.

Sr.No. Метод и описание
1

stats.isFile()

Возвращает истину, если тип файла - простой файл.

2

stats.isDirectory()

Возвращает истину, если тип файла каталога.

3

stats.isBlockDevice()

Возвращает истину, если тип файла блочного устройства.

4

stats.isCharacterDevice()

Возвращает истину, если тип файла символьного устройства.

5

stats.isSymbolicLink()

Возвращает истину, если тип файла - символическая ссылка.

6

stats.isFIFO()

Возвращает истину, если тип файла FIFO.

7

stats.isSocket()

Возвращает истину, если тип файла asocket.

пример

Давайте создадим файл js с именем main.js со следующим кодом -

var fs = require("fs");

console.log("Going to get file info!");
fs.stat('input.txt', function (err, stats) {
   if (err) {
      return console.error(err);
   }
   console.log(stats);
   console.log("Got file info successfully!");
   
   // Check file type
   console.log("isFile ? " + stats.isFile());
   console.log("isDirectory ? " + stats.isDirectory());    
});

Теперь запустите main.js, чтобы увидеть результат -

$ node main.js

Проверьте вывод.

Going to get file info!
{ 
   dev: 1792,
   mode: 33188,
   nlink: 1,
   uid: 48,
   gid: 48,
   rdev: 0,
   blksize: 4096,
   ino: 4318127,
   size: 97,
   blocks: 8,
   atime: Sun Mar 22 2015 13:40:00 GMT-0500 (CDT),
   mtime: Sun Mar 22 2015 13:40:57 GMT-0500 (CDT),
   ctime: Sun Mar 22 2015 13:40:57 GMT-0500 (CDT) 
}
Got file info successfully!
isFile ? true
isDirectory ? false

Запись файла

Синтаксис

Ниже приведен синтаксис одного из методов записи в файл:

fs.writeFile(filename, data[, options], callback)

Этот метод перезапишет файл, если он уже существует. Если вы хотите записать в существующий файл, вам следует использовать другой доступный метод.

Параметры

Вот описание используемых параметров -

  • path - Это строка с именем файла, включая путь.

  • data - Это строка или буфер, который нужно записать в файл.

  • options- Третий параметр - это объект, который будет содержать {кодировку, режим, флаг}. По умолчанию. кодировка - utf8, режим - восьмеричное значение 0666., флаг - 'w'

  • callback - Это функция обратного вызова, которая получает единственный параметр err, который возвращает ошибку в случае любой ошибки записи.

пример

Давайте создадим файл js с именем main.js имеющий следующий код -

var fs = require("fs");

console.log("Going to write into existing file");
fs.writeFile('input.txt', 'Simply Easy Learning!', function(err) {
   if (err) {
      return console.error(err);
   }
   
   console.log("Data written successfully!");
   console.log("Let's read newly written data");
   
   fs.readFile('input.txt', function (err, data) {
      if (err) {
         return console.error(err);
      }
      console.log("Asynchronous read: " + data.toString());
   });
});

Теперь запустите main.js, чтобы увидеть результат -

$ node main.js

Проверьте вывод.

Going to write into existing file
Data written successfully!
Let's read newly written data
Asynchronous read: Simply Easy Learning!

Чтение файла

Синтаксис

Ниже приведен синтаксис одного из методов чтения из файла:

fs.read(fd, buffer, offset, length, position, callback)

Этот метод будет использовать файловый дескриптор для чтения файла. Если вы хотите прочитать файл напрямую, используя имя файла, вам следует использовать другой доступный метод.

Параметры

Вот описание используемых параметров -

  • fd - Это дескриптор файла, возвращаемый fs.open ().

  • buffer - Это буфер, в который будут записываться данные.

  • offset - Это смещение в буфере для начала записи.

  • length - Это целое число, определяющее количество байтов для чтения.

  • position- Это целое число, указывающее, с чего начать чтение в файле. Если позиция равна нулю, данные будут считаны из текущей позиции файла.

  • callback - Это функция обратного вызова, которая получает три аргумента (err, bytesRead, buffer).

пример

Давайте создадим файл js с именем main.js со следующим кодом -

var fs = require("fs");
var buf = new Buffer(1024);

console.log("Going to open an existing file");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
      return console.error(err);
   }
   console.log("File opened successfully!");
   console.log("Going to read the file");
   
   fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
      if (err){
         console.log(err);
      }
      console.log(bytes + " bytes read");
      
      // Print only read bytes to avoid junk.
      if(bytes > 0){
         console.log(buf.slice(0, bytes).toString());
      }
   });
});

Теперь запустите main.js, чтобы увидеть результат -

$ node main.js

Проверьте вывод.

Going to open an existing file
File opened successfully!
Going to read the file
97 bytes read
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Закрытие файла

Синтаксис

Ниже приведен синтаксис для закрытия открытого файла:

fs.close(fd, callback)

Параметры

Вот описание используемых параметров -

  • fd - Это дескриптор файла, возвращаемый методом file fs.open ().

  • callback - Это функция обратного вызова. Для обратного вызова завершения не передаются аргументы, кроме возможного исключения.

пример

Давайте создадим файл js с именем main.js имеющий следующий код -

var fs = require("fs");
var buf = new Buffer(1024);

console.log("Going to open an existing file");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
      return console.error(err);
   }
   console.log("File opened successfully!");
   console.log("Going to read the file");
   
   fs.read(fd, buf, 0, buf.length, 0, function(err, bytes) {
      if (err) {
         console.log(err);
      }

      // Print only read bytes to avoid junk.
      if(bytes > 0) {
         console.log(buf.slice(0, bytes).toString());
      }

      // Close the opened file.
      fs.close(fd, function(err) {
         if (err) {
            console.log(err);
         } 
         console.log("File closed successfully.");
      });
   });
});

Теперь запустите main.js, чтобы увидеть результат -

$ node main.js

Проверьте вывод.

Going to open an existing file
File opened successfully!
Going to read the file
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

File closed successfully.

Обрезать файл

Синтаксис

Ниже приведен синтаксис метода усечения открытого файла:

fs.ftruncate(fd, len, callback)

Параметры

Вот описание используемых параметров -

  • fd - Это дескриптор файла, возвращаемый fs.open ().

  • len - Это длина файла, после которой файл будет обрезан.

  • callback - Это функция обратного вызова. Для обратного вызова завершения не передаются аргументы, кроме возможного исключения.

пример

Давайте создадим файл js с именем main.js имеющий следующий код -

var fs = require("fs");
var buf = new Buffer(1024);

console.log("Going to open an existing file");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
      return console.error(err);
   }
   console.log("File opened successfully!");
   console.log("Going to truncate the file after 10 bytes");
   
   // Truncate the opened file.
   fs.ftruncate(fd, 10, function(err) {
      if (err) {
         console.log(err);
      } 
      console.log("File truncated successfully.");
      console.log("Going to read the same file"); 
      
      fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
         if (err) {
            console.log(err);
         }

         // Print only read bytes to avoid junk.
         if(bytes > 0) {
            console.log(buf.slice(0, bytes).toString());
         }

         // Close the opened file.
         fs.close(fd, function(err) {
            if (err) {
               console.log(err);
            } 
            console.log("File closed successfully.");
         });
      });
   });
});

Теперь запустите main.js, чтобы увидеть результат -

$ node main.js

Проверьте вывод.

Going to open an existing file
File opened successfully!
Going to truncate the file after 10 bytes
File truncated successfully.
Going to read the same file
Tutorials 
File closed successfully.

Удалить файл

Синтаксис

Ниже приведен синтаксис метода удаления файла:

fs.unlink(path, callback)

Параметры

Вот описание используемых параметров -

  • path - Это имя файла, включая путь.

  • callback - Это функция обратного вызова. Для обратного вызова завершения не передаются аргументы, кроме возможного исключения.

пример

Давайте создадим файл js с именем main.js имеющий следующий код -

var fs = require("fs");

console.log("Going to delete an existing file");
fs.unlink('input.txt', function(err) {
   if (err) {
      return console.error(err);
   }
   console.log("File deleted successfully!");
});

Теперь запустите main.js, чтобы увидеть результат -

$ node main.js

Проверьте вывод.

Going to delete an existing file
File deleted successfully!

Создать каталог

Синтаксис

Ниже приведен синтаксис метода создания каталога:

fs.mkdir(path[, mode], callback)

Параметры

Вот описание используемых параметров -

  • path - Это имя каталога, включая путь.

  • mode- Это разрешение каталога, которое необходимо установить. По умолчанию 0777.

  • callback - Это функция обратного вызова. Для обратного вызова завершения не передаются аргументы, кроме возможного исключения.

пример

Давайте создадим файл js с именем main.js имеющий следующий код -

var fs = require("fs");

console.log("Going to create directory /tmp/test");
fs.mkdir('/tmp/test',function(err) {
   if (err) {
      return console.error(err);
   }
   console.log("Directory created successfully!");
});

Теперь запустите main.js, чтобы увидеть результат -

$ node main.js

Проверьте вывод.

Going to create directory /tmp/test
Directory created successfully!

Читать каталог

Синтаксис

Ниже приведен синтаксис метода чтения каталога:

fs.readdir(path, callback)

Параметры

Вот описание используемых параметров -

  • path - Это имя каталога, включая путь.

  • callback- Это функция обратного вызова, которая получает два аргумента (err, files), где files - это массив имен файлов в каталоге, исключая '.' и '..'.

пример

Давайте создадим файл js с именем main.js имеющий следующий код -

var fs = require("fs");

console.log("Going to read directory /tmp");
fs.readdir("/tmp/",function(err, files) {
   if (err) {
      return console.error(err);
   }
   files.forEach( function (file) {
      console.log( file );
   });
});

Теперь запустите main.js, чтобы увидеть результат -

$ node main.js

Проверьте вывод.

Going to read directory /tmp
ccmzx99o.out
ccyCSbkF.out
employee.ser
hsperfdata_apache
test
test.txt

Удалить каталог

Синтаксис

Ниже приведен синтаксис метода удаления каталога:

fs.rmdir(path, callback)

Параметры

Вот описание используемых параметров -

  • path - Это имя каталога, включая путь.

  • callback - Это функция обратного вызова. Для обратного вызова завершения не передаются аргументы, кроме возможного исключения.

пример

Давайте создадим файл js с именем main.js имеющий следующий код -

var fs = require("fs");

console.log("Going to delete directory /tmp/test");
fs.rmdir("/tmp/test",function(err) {
   if (err) {
      return console.error(err);
   }
   console.log("Going to read directory /tmp");
   
   fs.readdir("/tmp/",function(err, files) {
      if (err) {
         return console.error(err);
      }
      files.forEach( function (file) {
         console.log( file );
      });
   });
});

Теперь запустите main.js, чтобы увидеть результат -

$ node main.js

Проверьте вывод.

Going to read directory /tmp
ccmzx99o.out
ccyCSbkF.out
employee.ser
hsperfdata_apache
test.txt

Справочник по методам

Старший Нет Метод и описание
1

fs.rename(oldPath, newPath, callback)

Асинхронное переименование (). Обратному вызову завершения не передаются никакие аргументы, кроме возможного исключения.

2

fs.ftruncate(fd, len, callback)

Асинхронный ftruncate (). Обратному вызову завершения не передаются никакие аргументы, кроме возможного исключения.

3

fs.ftruncateSync(fd, len)

Синхронный ftruncate ().

4

fs.truncate(path, len, callback)

Асинхронное усечение (). Обратному вызову завершения не передаются никакие аргументы, кроме возможного исключения.

5

fs.truncateSync(path, len)

Синхронное усечение ().

6

fs.chown(path, uid, gid, callback)

Асинхронный chown (). Обратному вызову завершения не передаются никакие аргументы, кроме возможного исключения.

7

fs.chownSync(path, uid, gid)

Синхронный chown ().

8

fs.fchown(fd, uid, gid, callback)

Асинхронный fchown (). Обратному вызову завершения не передаются никакие аргументы, кроме возможного исключения.

9

fs.fchownSync(fd, uid, gid)

Синхронный fchown ().

10

fs.lchown(path, uid, gid, callback)

Асинхронный lchown (). Обратному вызову завершения не передаются никакие аргументы, кроме возможного исключения.

11

fs.lchownSync(path, uid, gid)

Синхронный lchown ().

12

fs.chmod(path, mode, callback)

Асинхронный chmod (). Обратному вызову завершения не передаются никакие аргументы, кроме возможного исключения.

13

fs.chmodSync(path, mode)

Синхронный chmod ().

14

fs.fchmod(fd, mode, callback)

Асинхронный fchmod (). Обратному вызову завершения не передаются никакие аргументы, кроме возможного исключения.

15

fs.fchmodSync(fd, mode)

Синхронный fchmod ().

16

fs.lchmod(path, mode, callback)

Асинхронный lchmod (). Обратному вызову завершения не передаются никакие аргументы, кроме возможного исключения. Доступно только в Mac OS X.

17

fs.lchmodSync(path, mode)

Синхронный lchmod ().

18

fs.stat(path, callback)

Асинхронная статистика (). Обратный вызов получает два аргумента (err, stats), где stats - это объект fs.Stats.

19

fs.lstat(path, callback)

Асинхронный lstat (). Обратный вызов получает два аргумента (err, stats), где stats - это объект fs.Stats. lstat () идентичен stat (), за исключением того, что если путь является символьной ссылкой, то указывается сама ссылка, а не файл, на который она ссылается.

20

fs.fstat(fd, callback)

Асинхронный fstat (). Обратный вызов получает два аргумента (err, stats), где stats - это объект fs.Stats. fstat () идентичен stat (), за исключением того, что файл, который нужно обработать, определяется дескриптором файла fd.

21 год

fs.statSync(path)

Синхронная статистика (). Возвращает экземпляр fs.Stats.

22

fs.lstatSync(path)

Синхронный lstat (). Возвращает экземпляр fs.Stats.

23

fs.fstatSync(fd)

Синхронный fstat (). Возвращает экземпляр fs.Stats.

24

fs.link(srcpath, dstpath, callback)

Асинхронная ссылка (). Обратному вызову завершения не передаются никакие аргументы, кроме возможного исключения.

25

fs.linkSync(srcpath, dstpath)

Синхронная ссылка ().

26

fs.symlink(srcpath, dstpath[, type], callback)

Асинхронная символическая ссылка (). Обратному вызову завершения не передаются никакие аргументы, кроме возможного исключения. Аргумент типа может иметь значение «dir», «file» или «junction» (по умолчанию «файл») и доступен только в Windows (игнорируется на других платформах). Обратите внимание, что точки соединения Windows требуют, чтобы конечный путь был абсолютным. При использовании «соединения» аргумент назначения будет автоматически нормализован до абсолютного пути.

27

fs.symlinkSync(srcpath, dstpath[, type])

Синхронная символическая ссылка ().

28

fs.readlink(path, callback)

Асинхронный readlink (). Обратный вызов получает два аргумента (err, linkString).

29

fs.realpath(path[, cache], callback)

Асинхронный realpath (). Обратный вызов получает два аргумента (err, resolvedPath). Может использовать process.cwd для разрешения относительных путей. cache - это литерал объекта сопоставленных путей, который можно использовать для принудительного разрешения определенного пути или предотвращения дополнительных вызовов fs.stat для известных реальных путей.

30

fs.realpathSync(path[, cache])

Синхронный realpath (). Возвращает разрешенный путь.

31 год

fs.unlink(path, callback)

Асинхронный unlink (). Обратному вызову завершения не передаются никакие аргументы, кроме возможного исключения.

32

fs.unlinkSync(path)

Синхронное отключение ().

33

fs.rmdir(path, callback)

Асинхронный rmdir (). Обратному вызову завершения не передаются никакие аргументы, кроме возможного исключения.

34

fs.rmdirSync(path)

Синхронный rmdir ().

35 год

fs.mkdir(path[, mode], callback)

Асинхронный mkdir (2). Обратному вызову завершения не передаются никакие аргументы, кроме возможного исключения. режим по умолчанию 0777.

36

fs.mkdirSync(path[, mode])

Синхронный mkdir ().

37

fs.readdir(path, callback)

Асинхронный каталог чтения (3). Читает содержимое каталога. Обратный вызов получает два аргумента (err, files), где files - это массив имен файлов в каталоге, исключая '.' и '..'.

38

fs.readdirSync(path)

Синхронный readdir (). Возвращает массив имен файлов, исключая '.' и '..'.

39

fs.close(fd, callback)

Асинхронный close (). Обратному вызову завершения не передаются никакие аргументы, кроме возможного исключения.

40

fs.closeSync(fd)

Синхронное закрытие ().

41 год

fs.open(path, flags[, mode], callback)

Открыт асинхронный файл.

42

fs.openSync(path, flags[, mode])

Синхронная версия fs.open ().

43

fs.utimes(path, atime, mtime, callback)

 

44

fs.utimesSync(path, atime, mtime)

Измените временные метки файла, на который ссылается указанный путь.

45

fs.futimes(fd, atime, mtime, callback)

 

46

fs.futimesSync(fd, atime, mtime)

Измените временные метки файла, на который ссылается предоставленный файловый дескриптор.

47

fs.fsync(fd, callback)

Асинхронный fsync. Обратному вызову завершения не передаются никакие аргументы, кроме возможного исключения.

48

fs.fsyncSync(fd)

Синхронный fsync.

49

fs.write(fd, buffer, offset, length[, position], callback)

Записать буфер в файл, указанный в fd.

50

fs.write(fd, data[, position[, encoding]], callback)

Записать данные в файл, указанный в fd. Если данные не являются экземпляром буфера, тогда значение будет преобразовано в строку.

51

fs.writeSync(fd, buffer, offset, length[, position])

Синхронные версии fs.write (). Возвращает количество записанных байтов.

52

fs.writeSync(fd, data[, position[, encoding]])

Синхронные версии fs.write (). Возвращает количество записанных байтов.

53

fs.read(fd, buffer, offset, length, position, callback)

Прочитать данные из файла, указанного в fd.

54

fs.readSync(fd, buffer, offset, length, position)

Синхронная версия fs.read. Возвращает количество bytesRead.

55

fs.readFile(filename[, options], callback)

Асинхронно читает все содержимое файла.

56

fs.readFileSync(filename[, options])

Синхронная версия fs.readFile. Возвращает содержимое имени файла.

57

fs.writeFile(filename, data[, options], callback)

Асинхронно записывает данные в файл, заменяя файл, если он уже существует. данные могут быть строкой или буфером.

58

fs.writeFileSync(filename, data[, options])

Синхронная версия fs.writeFile.

59

fs.appendFile(filename, data[, options], callback)

Асинхронно добавлять данные в файл, создавая файл, если он не существует. данные могут быть строкой или буфером.

60

fs.appendFileSync(filename, data[, options])

Синхронная версия fs.appendFile.

61

fs.watchFile(filename[, options], listener)

Следите за изменениями в имени файла. Слушатель обратного вызова будет вызываться каждый раз при доступе к файлу.

62

fs.unwatchFile(filename[, listener])

Прекратите следить за изменениями в имени файла. Если указан слушатель, удаляется только этот конкретный слушатель. В противном случае все слушатели будут удалены, и вы фактически прекратите просмотр имени файла.

63

fs.watch(filename[, options][, listener])

Следите за изменениями в имени файла, где имя файла - это либо файл, либо каталог. Возвращенный объект - это fs.FSWatcher.

64

fs.exists(path, callback)

Проверьте, существует ли данный путь, проверив файловую систему. Затем вызовите аргумент обратного вызова со значением true или false.

65

fs.existsSync(path)

Синхронная версия fs. существует.

66

fs.access(path[, mode], callback)

Проверяет права пользователя для файла, указанного по пути. mode - необязательное целое число, указывающее, какие проверки доступности должны выполняться.

67

fs.accessSync(path[, mode])

Синхронная версия fs.access. Он срабатывает, если какие-либо проверки доступности не удались, и ничего не делает в противном случае.

68

fs.createReadStream(path[, options])

Возвращает новый объект ReadStream.

69

fs.createWriteStream(path[, options])

Возвращает новый объект WriteStream.

70

fs.symlink(srcpath, dstpath[, type], callback)

Асинхронная символическая ссылка (). Обратному вызову завершения не передаются никакие аргументы, кроме возможного исключения. Аргумент типа может иметь значение «dir», «file» или «junction» (по умолчанию «файл») и доступен только в Windows (игнорируется на других платформах). Обратите внимание, что точки соединения Windows требуют, чтобы конечный путь был абсолютным. При использовании «соединения» аргумент назначения будет автоматически нормализован до абсолютного пути.