Node.js 如何检查文件是否被其他进程使用

5
我正在开发一个使用文件系统操作的Node-Webkit应用程序。在删除(unlink)之前,我需要检查文件是否正在被其他进程使用。
如果我只使用fs.unlink方法,系统将等待文件停止被使用,然后再完全删除它。但是我想要的是,如果文件正在被使用,则不等待直接取消整个操作,不要删除该文件。
谢谢。

1
如果您使用同步操作删除文件会发生什么?您会收到错误提示还是它会阻塞您的脚本? - Krasimir
我也遇到了类似的情况,因此我可以说,除非文件被释放,否则它不会被删除。在这里释放还意味着停止服务器,这并不是理想的做法。 - Neeraj Sewani
1个回答

3
假设您使用的是*nix系统,以下类似的内容应该可以正常工作。显然,这只是一个简单的示例,可能会有错误和路径检查方面的问题。可能会有更好的方法来实现此目的,但我想先从这个开始讨论:
var fs = require('fs'),
    exec = require('child_process').exec;

function unlinkIfUnused(path) {
    exec('lsof ' + path, function(err, stdout, stderr) {
        if (stdout.length === 0) {
            console.log(path, " not in use. unlinking...");
            // fs.unlink...
        } else {
            console.log(path, "IN USE. Ignoring...");
        }
    });
}

unlinkIfUnused('/home/jack/testlock.txt');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接