Electron nodejs异步获取文件夹内容 返回文件地址 文件类型可选

684 阅读1分钟

原生Node.js模块由Electron支持,在开发的过程中 我们需要读取用户交互的文件夹内容, 或则目标类型的文件内容,比如我们只想获取视频内容或则音频内容。

const fs = require('fs');
const MD5 = require('md5-file');
const path = require('path');

/**
* 异步获取文件夹内容
* @param dir 文件夹地址
* @param fileTypeReg 文件类获取型 比如 获取图片new RegExp('\\.png$', 'gim');
* @param isGetSingle 是否只返回一个文件
*/
export const getFilesASync = async (
 dir: string,
 results:any[] = [],
 fileTypeReg?: RegExp
)=> {
 await new Promise((resolve, reject) => {
   fs.readdir(dir, (err: any, list: any[]) => {
     if (err) return reject();
     let i = 0;
     // eslint-disable-next-line consistent-return
     (function next() {
       // eslint-disable-next-line no-plusplus
       let file = list[i++];
       if (!file) return resolve(results);
       file = path.resolve(dir, file);
       fs.stat(file, (err2: any, stat: { isDirectory: () => any }) => {
         if (stat && stat.isDirectory()) {
           getFilesASync(file, results, fileTypeReg);
           next();
         } else {
           if (fileTypeReg) {
             if (fileTypeReg.test(file)) {
               results.push(file);
             }
           } else if (!fileTypeReg) {
             results.push(file);
           }
           next();
         }
       });
     })();

   });
 })
};