0

I am looking for a platform independent (win, mac, linux) way of finding whether a file is executable or not. Following doesn't work for me (not even on linux) -

var spawn = require("child_process").spawn;
var proc = spawn("whatever file");
proc.stderr.on('data', function (data) {
  if (/^execvp\(\)/.test(data)) {
    console.log('Failed to start child process.');
  }
});
4

2 回答 2

1

我强烈建议不要执行一个文件来测试它是否是可执行的。如果您不知道文件是什么,请不要只运行它!这是一个安全和一般损坏的噩梦。这类似于通过饮用来测试一小瓶透明液体是否有毒。

第 1 步:通过读取它的元数据stat

在 posix(linux、mac、bsd)上,使用fs.statthen 检查该mode字段来检查各种排列可执行文件。

第二步:读取文件数据的开头并猜测类型

您可以在其上运行文件实用程序,它将使用幻数数据库和其他启发式方法来猜测文件类型。

视窗

就平台无关而言,AFAIK 此功能在 Windows 上还不够相似,因此无法提供与上述面向 posix 的技术等效的可靠 Windows。Windows 文件系统和文件类型是不同的,所以我认为如果你想让它真正起作用,你需要一个单独的实现来正确处理 Windows(以及我以外的其他人建议如何在 Windows 上实现它)。

于 2013-09-04T17:37:10.580 回答
0

我使用mime-magic nodejs 模块来了解文件的 mime 类型。

于 2013-09-06T13:29:44.553 回答