代码之家  ›  专栏  ›  技术社区  ›  Un1

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

  •  0
  • Un1  · 技术社区  · 7 年前

    我正在尝试创建新文件,但以下两种方法都会引发错误:

    方法1:

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

    方法2:

    if (!fs.existsSync(fullPath)) { 
      fs.appendFile(fullPath)
    } else {     
      alert("exist")
    }
    
    • 如果存在具有指定名称的文件:console抛出 存在
    • 如果指定名称的文件不存在:它将创建该文件并给出此错误 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抛出 created
    • 如果指定名称的文件不存在:console抛出 创建 并创建文件

    更新2:

    我设法以一种稍微不同的方式工作:

    if (!fs.existsSync(fullPath)) { 
      fs.writeFileSync(fullPath, '')
    } else {
      alert("exist")
    }
    
    1 回复  |  直到 4 年前
        1
  •  2
  •   jens    7 年前

    对于方法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