原生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();
}
});
})();
});
})
};