2015-07-02 2 views
5

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

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

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

Однако, глядя на official documentation для fs.exists, гласит:

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

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

fs.exists() будет устаревшим.

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

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

+1

он сообщает вам: откройте файл и обработайте ошибку (или ее отсутствие) – dandavis

ответ

11

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

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

Try что-то вроде:

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!"); 
    } 
    }); 
} 
0

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

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

Node file system documentation.

Смежные вопросы