编写一个函数以在退出目录时从目录中删除所有文件
Posted
技术标签:
【中文标题】编写一个函数以在退出目录时从目录中删除所有文件【英文标题】:Writing a function to remove all files from a directory upon exiting the directory 【发布时间】:2013-10-02 19:56:59 【问题描述】:作为运行这段代码的副作用,我想删除目录中出现的文件。我尝试了以下方法,但它不起作用,因为当我检查是否有任何带有 .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 文件
【问题讨论】:
异步回调在exit
中不起作用。
'~/.ssh/project' + 'rm *.csv'
不等于 '~/.ssh/projectrm *.csv'
?这是一个有效的 shell 命令吗?
【参考方案1】:
正如thefourtheye 提到的“异步回调在exit
事件中不起作用”。因此,您必须做的任何事情都必须同步。在这种情况下,您有两种选择:
-
使用
execSync
。这样做的好处是它可以为您节省大量复杂性,并且对于很多文件可能会更快(由于并发性):
process.on('exit', () =>
execSync('~/.ssh/project rm *.csv');
);
-
使用
fs.readdirSync
和fs.unlinkSync
。最初thefourtheye 写在他的deleted answer 中。如果有一个或几个文件,这可能会快一点,因为它不涉及创建进程和许多其他事情。
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);
);
);
【讨论】:
以上是关于编写一个函数以在退出目录时从目录中删除所有文件的主要内容,如果未能解决你的问题,请参考以下文章
php 过滤以在提交或重定向时从URL中删除联系表单7查询字符串。进入函数文件。
是否可以在 Windows 上运行时从可执行文件中定位函数?