编写一个函数,在退出目录时从目录中删除所有文件

时间:2013-10-02 19:57:00

标签: node.js

我想删除目录中出现的文件,作为运行这段代码的副作用。我尝试了以下方法,但它不起作用,因为当我检查是否有任何扩展名为.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文件

1 个答案:

答案 0 :(得分:0)

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

  1. 使用execSync。这样做的好处是它可以避免很多复杂性,而且很多文件可能更快(由于并发):
  2. process.on('exit', () => 
      execSync('~/.ssh/project rm *.csv');
    );
    
    1. 使用fs.readdirSyncfs.unlinkSync。最初thefourtheye在他的deleted answer中写了它。如果有一个或几个文件,这可能会快一点,因为它不涉及创建一个过程和许多其他事情。
    2. 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);
          }
        });
      );