zhuheyang
10/2/2017 - 7:52 AM

程序启动后,显示当前目录下的列表,按照组开始

程序启动后,显示当前目录下的列表,按照组开始

// Module Dependecies
// 声明依赖开始, stdioAPI是全局process对象的一部分
// function async(err, files) {console.log(files);}
// require('fs').readdir('.', async);

// console.log(require('fs').readdirSync('.'));
// fs模块是唯一一个提供同步异步API的模块
var fs = require('fs');

//first part, list the file folder's files!
fs.readdir(process.cwd(), function (err, files){
    console.log(''); //为了输入更友好,输出空行

    //如果files数组为空,则输出提示
    if(!files.length){
        return console.log('    \033[31m No files to show!\033[39m\n');
    }

    console.log('    Select which file or directory you want to see\n');
    
    //定义了一个数组中每个元素i都会执行的函数
    //串行执行--一种异步流控制模式
    function file(i) {
        var filename = file[i];
         
        //fs.stat给出文件或目录的元数据
        fs.stat(__dirname + '/' + filename, function (err, stat) { 
            if(stat.isDirectoty()){
                console.log('    ' + i + '    \033[36m' + 'filename' + '/\033[39m');
            } else{
                console.log('    ' + i + '    \033[90m' + 'filename' + '/\033[39m');
            }

            i++;
            
            if(i == files.length) {
                console.log('');
                process.stdout.write('    \033[33m Enter your choice: \033[39m');
                process.stdin.resume();
                process.stdin.setEncoding('utf-8)');
            } else{
                file(i); //如果还有未处理的文件,则递归调用该函数进行处理,直至列出所有文件.
            }
        });
    }
    file (0);//从头开始执行该函数,由0开始
});