javascript - 使用 node 写一个简单的文件读取函数,如何实现子目录文件的读取
天蓬老师
天蓬老师 2017-04-11 11:03:35
[JavaScript讨论组]
var fs = require('fs'),
    stdin = process.stdin, 
    stdout = process.stdout;

var readFile = (dir) => {
  let stats = [];
  fs.readdir(dir, (err, files) => {
    // called for each file walked in the directory
    let file = (i) => {
      let filename = files[i];

      fs.stat(dir + '/' + filename, (err, stat) => {
        stats[i] = stat;
        if (stat.isDirectory()) {
          console.log('       ' + i + '   \033[36m' + filename + '/\033[39m');
        } else {
          console.log('       ' + i + '   \033[90m' + filename + '\033[39m');
        }

        if (++i === files.length) {
          read();
        } else {
          file(i);
        }
      });
    };

    // read user input when files are shown
    let read = () => {
      console.log('');
      stdout.write('   \033[33mEnter your choice: \033[39m');
      stdin.resume();
      stdin.setEncoding('utf8');
      stdin.on('data', option);
    };

    let option = (data) => {
      let filename = files[Number(data)];
      console.log('      ' + filename);
      if (!filename) {
        stdout.write('   \033[31mEnter your choice: \033[39m');
      } else {
        stdin.pause();
        if (stats[Number(data)].isDirectory()) {
          // 我想在这里回调 readFile 函数,从而对子目录下的文件执行同上的操作
          // 请问该怎么写呢?
          // readFile(dir + '/' + filename);
        } else {
          fs.readFile(dir + '/' + filename, 'utf8', (err, data) => {
            console.log('');
            console.log('\033[90m' + data.replace(/(.*)/g, '   $1') + '\033[39m');
          });
        }
      }
    };

    file(0);
  });
};

readFile(process.cwd());

如果直接回调 readFile 函数,会导致选中父目录与子目录中同编号的两个文件,最终使stat.isDirectory()执行失败

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(1)
迷茫

改这儿:

let read = () => {
    console.log('');
    stdout.write('   \033[33mEnter your choice: \033[39m');
    stdin.resume();
    stdin.setEncoding('utf8');
    stdin.once('data', option);//改成once
};
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号