const fs = require('fs').promises; const path = require('path'); /** * 读取指定文件夹内的所有子文件夹并返回路径 * @param {string} folderPath - 要读取的文件夹路径 * @returns {Promise} 子文件夹路径数组 */ async function getSubdirectories(folderPath) { try { // 检查文件夹是否存在 await fs.access(folderPath); // 读取文件夹内容 const items = await fs.readdir(folderPath, { withFileTypes: true }); // 过滤出子文件夹 const directories = items .filter(item => item.isDirectory()) .map(item => path.join(folderPath, item.name)); return directories; } catch (error) { return []; } } /** * 获取指定文件夹内的所有文件 * @param {string} folderPath - 要读取的文件夹路径 * @returns {Promise} 文件路径数组 */ async function getFilesInDirectory(folderPath) { try { // 检查文件夹是否存在 await fs.access(folderPath); // 读取文件夹内容 const items = await fs.readdir(folderPath, { withFileTypes: true }); // 过滤出文件 const files = items .filter(item => item.isFile()) .map(item => path.join(folderPath, item.name)); return files; } catch (error) { if (error.code === 'ENOENT') { console.error(`错误: 文件夹不存在 - ${folderPath}`); return []; // 返回空数组而不是抛出错误 } throw error; } } // 使用示例 async function main() { const targetFolder = './example'; // 替换为您的文件夹路径 try { // 获取子文件夹 console.log('正在读取子文件夹...'); const subdirectories = await getSubdirectories(targetFolder); console.log('找到的子文件夹:'); subdirectories.forEach(dir => console.log(`- ${dir}`)); // 获取每个子文件夹中的文件 for (const dir of subdirectories) { console.log(`\n读取文件夹: ${dir}`); const files = await getFilesInDirectory(dir); if (files.length === 0) { console.log(' 此文件夹中没有文件或文件夹不存在'); } else { console.log(' 找到的文件:'); files.forEach(file => console.log(` - ${file}`)); } } // 测试不存在的文件夹 console.log('\n测试不存在的文件夹...'); const nonExistentFiles = await getFilesInDirectory('./non-existent-folder'); console.log(`不存在的文件夹返回了 ${nonExistentFiles.length} 个文件`); } catch (error) { console.error('发生错误:', error.message); } } // 如果直接运行此文件,则执行示例 if (require.main === module) { main(); } module.exports = { getSubdirectories, getFilesInDirectory };