0

作为运行这段代码的副作用,我想删除目录中出现的文件。我尝试了以下方法,但它不起作用,因为当我检查是否有任何带有 .csv 扩展名的文件时它们仍然存在。我已使用以下链接作为模板

http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback

我的代码是:

    process.on('exit', function()
{
    var child = exec('~/.ssh/project' + 'rm *.csv', 
    function (error, stdout, stderr)
    {
        if (error !== null || stderr.length > 0)
        {
            console.log(stderr);
            console.log('exec error: ' + error);
              proces.exit();
        }
    });

});

但这不起作用,因为此目录中仍有 csv 文件

4

1 回答 1

0

正如thefourtheyeexit提到的“异步回调在事件中不起作用”。因此,您必须做的任何事情都必须同步。在这种情况下,您有两种选择:

  1. 使用execSync. 这样做的好处是它可以为您节省很多复杂性,并且对于很多文件可能会更快(由于并发性):
process.on('exit', () => 
  execSync('~/.ssh/project rm *.csv');
);
  1. 使用fs.readdirSyncfs.unlinkSync。最初thefourtheye写在他删除的答案中。如果有一个或几个文件,这可能会快一点,因为它不涉及创建进程和许多其他事情。
function getUserHome() {
  return process.env[(process.platform==='win32')?'USERPROFILE':'HOME']+path.sep;
}

process.on('exit', () =>
  fs.readdirSync(getUserHome() + ".ssh/project").forEach((fileName) => {
    if (path.extname(fileName) === ".csv") {
      fs.unlinkSync(fileName);
    }
  });
);
于 2016-12-17T07:47:54.023 回答