-->

如何FS回调方法中访问文件的名称?(How to access name of file withi

2019-09-20 05:04发布

如何获得访问的参数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.stat回调它将使用test2.txt这不是预期的。

我预计回调中看到的是

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

Answer 1:

不要以为有一种方法,现在这样做的权利。 可能是在某些时候添加到节点一件好事。 如果你打算这样做了很多,你可以把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);});


Answer 2:

您可以使用同步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'


Answer 3:

接受答案的伟大工程,但在这里我想到了,当我通过文件的数组要循环的解决方案:

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函数,并传递给它的文件名作为参数。 该函数然后返回它使用的实际回调函数fs.stat



文章来源: How to access name of file within fs callback methods?