Создайте файл, если он еще не существует

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

сначала я подумал, что должен это сделать:

fs.exists(filename, function(exists) {
  if(exists) {
    // Create file
  }
  else {
    console.log("Refusing to overwrite existing", filename);
  }
});

однако, глядя на официальная документация на fs.exists, он читает:

fs.существует() является анахронизмом и существует только по историческим причинам. Не должно почти никогда не будет поводом использовать его в своем собственном коде.

в частности, проверка наличия файла перед его открытием анти-шаблон, который оставляет вас уязвимыми для условий гонки: другой процесс может удалить файл между вызовами fs.существует() и файловая система.открытый.)( Просто откройте файл и обработайте ошибку, когда это не так там.

fs.существует() является устаревшим.

очевидно, что разработчики узлов считают мой метод плохой идеей. Кроме Того, Я не хотите использовать функцию, которая будет удалена.

как я могу создать файл без записи поверх существующего?

3 ответов


Я думаю, ответ:

просто откройте файл и обработать ошибку, когда ее там нет.

попробуйте что-то вроде:

function createFile(filename) {
  fs.open(filename,'r',function(err, fd){
    if (err) {
      fs.writeFile(filename, '', function(err) {
          if(err) {
              console.log(err);
          }
          console.log("The file was saved!");
      });
    } else {
      console.log("The file exists!");
    }
  });
}

fs.closeSync(fs.openSync('/var/log/my.log', 'a'))

Если вы хотите записать данные в этот файл позже, вы можете использовать fs.appendFile('message.txt', 'data to append', 'utf8', callback);.

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

документация файловой системы узла.