我正在开发一个javascript文件管理器,我想在主目录中列出我的所有文件,并知道它们是文件还是目录,这里是代码:
var listFiles = function (path) {
var files = fs.readdirSync(HOME);
for (var i = 0; i < files.length; i++) {
var name = HOME + '/' + files[i];
fs.stat(name.toString(), function (err, fileStat) {
if(fileStat.isFile()){
console.log(name.toString() + ' -> FILE');
}
else if (fileStat.isDirectory()) {
console.log(name.toString() + ' -> DIR');
}
});
}
};
var HOME = '/home/user'
var local = listFiles(HOME);
输出是这样的:
/home/user/.xsession-errors.old -> DIR
/home/user/.xsession-errors.old -> FILE
/home/user/.xsession-errors.old -> DIR
/home/user/.xsession-errors.old -> DIR
/home/user/.xsession-errors.old -> FILE
/home/user/.xsession-errors.old -> FILE
/home/user/.xsession-errors.old -> FILE
/home/user/.xsession-errors.old -> DIR
/home/user/.xsession-errors.old -> DIR
/home/user/.xsession-errors.old -> FILE
问题在于我只能
/home/user/.xsession-errors.old -> FILE (or DIR)
作为文件的名称而不是预期的名称(例如:/home/user/file.txt)
答案 0 :(得分:0)
我认为您的问题是,在调用回调时,name
包含最后一个文件的名称。您应该了解变量作用域在JavaScript中的工作原理。
这MDN article on closures可能会有所帮助。
这可以做到:
var fs = require('fs');
var path = require('path');
var listFiles = function (basepath) {
fs.readdirSync(basepath).forEach(function (filename) {
var fullpath = path.join(basepath, filename);
fs.stat(fullpath, function (err, fileStat) {
if (fileStat.isFile()) {
console.log(filename + ' -> FILE');
} else if (fileStat.isDirectory()) {
console.log(filename + ' -> DIR');
}
});
});
};