尝试使用Electron应用程序中的节点fs的不同方法创建新文件时出错

时间:2018-02-28 23:51:41

标签: javascript node.js electron

我试图创建一个新文件,但下面的两个方法都给我一个错误:

方法1:

fs.writeFile(fullPath, '', (error) => { alert("exist") })
  • 如果存在具有指定名称的文件:console throws exist
  • 如果具有指定名称的文件不存在:控制台抛出exist并创建文件

方法2:

if (!fs.existsSync(fullPath)) { 
  fs.appendFile(fullPath)
} else {     
  alert("exist")
}
  • 如果存在具有指定名称的文件:console throws exist
  • 如果具有指定名称的文件不存在:它会创建文件并向我发出此错误DeprecationWarning: Calling an asynchronous function without callback is deprecated.

问题:

我做错了什么?

更新

我也尝试过以下答案中建议的这种方法:

// fullPath= 'C:/Users/Name/test.txt'

fs.writeFile(fullPath, '', (error) => {
  if(error) {
    alert("exist")
    return
  }
    alert("created")
})

我得到了这个:

  • 如果存在具有指定名称的文件:console throws created
  • 如果具有指定名称的文件不存在:控制台抛出created并创建文件

更新2:

我设法以稍微不同的方式使它工作:

if (!fs.existsSync(fullPath)) { 
  fs.writeFileSync(fullPath, '')
} else {
  alert("exist")
}

1 个答案:

答案 0 :(得分:2)

对于方法1,您使用的是fs.writeFile(file, data[, options], callback)。因此无论如何都会调用回调,警告'存在'。你应该检查一下,如:

fs.writeFile(fullPath, '', (error) => {
  if(error) {
    alert("exist");
    return;
  }

  // no error, do what you want.
});

参考:https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback

对于方法2,您将收到警告,因为您在没有回调的情况下调用fs.appendFile。使用fs.appendFileSync或给它回调。

参考:https://nodejs.org/api/fs.html#fs_fs_appendfile_file_data_options_callback