如何访问fscallback方法中的文件的名称?

如何从callback中访问fs.readfs.stat …方法的参数?

例如,如果我想根据其大小处理文件(coffeeScript)代码片段

 #assuming test1.txt exists filename = "./test1.txt" fs.stat filename, (err, stats) -> data = filename:filename,size:stats.size console.log data #further process filename based on size filename = "./test2.txt" 

版画

 { filename: './test2.txt', size: 5 } 

因为文件名被设置为“./test2.txt”。 如果我使用fs.statcallback中的filenamevariables处理/读取文件,它将使用不是打算的test2.txt

我期望在callback中看到的是

 { filename: './test1.txt', size: 5 } 

不要以为现在有办法做到这一点。 在某些时候添加到节点可能是一件好事。 如果你打算这么做,你可以把fs.stat放在一个友好的包装里。

 var friendlyStat = function(filename, callback){ fs.stat(filename, function(err, stats){ stats.filename = filename if(err) { callback(err); } else { callback(err, stats); } }) } friendlyStat('test1.txt', function(err, stat){ console.log(stat.filename);}); friendlyStat('test2.txt', function(err, stat){ console.log(stat.filename);}); 

被接受的答案很好,但是当我想要遍历一系列文件的时候,我提出了一个解决scheme:

 var files = [ 'path/to/file1.txt', 'path/to/file2.txt'], callback = function( filepath ) { return function( error, stat ) { console.log( filepath ); console.log( error ); console.log( stat ) }; }; for ( var i = 0; i < files.length; i++ ) { fs.stat( files[ i ], callback( files[ i ] ) ); } 

我们正在调用callback函数并将其作为parameter passing给它。 该函数然后返回fs.stat使用的实际callback函数。

你可以使用同步fs.statSync()函数,如果你可以负担得起,这将有助于你的问题。

 var filename = 'test1.txt'; var stat = fs.statSync(filename); //code you were writing in callback comes here like the below: console.log('Is ' + filename + ' a directory? ' + stat.isDirectory()); //Outputs 'Is test1.txt a directory? false'