diff --git "a/docs/\343\200\212\351\233\205\346\200\235\350\200\203\350\257\225\345\256\230\346\226\271\346\214\207\345\215\227\343\200\213\357\274\210\347\254\2542\347\211\210\357\274\211tree.md" "b/docs/\343\200\212\351\233\205\346\200\235\350\200\203\350\257\225\345\256\230\346\226\271\346\214\207\345\215\227\343\200\213\357\274\210\347\254\2542\347\211\210\357\274\211tree.md"
index d73a340..d93d345 100644
--- "a/docs/\343\200\212\351\233\205\346\200\235\350\200\203\350\257\225\345\256\230\346\226\271\346\214\207\345\215\227\343\200\213\357\274\210\347\254\2542\347\211\210\357\274\211tree.md"
+++ "b/docs/\343\200\212\351\233\205\346\200\235\350\200\203\350\257\225\345\256\230\346\226\271\346\214\207\345\215\227\343\200\213\357\274\210\347\254\2542\347\211\210\357\274\211tree.md"
@@ -1,14 +1,10 @@
《雅思考试官方指南》(第2版)/图书介绍.mp4
-《雅思考试官方指南》(第2版)/《雅思手册》相关视频/雅思考试机考写作部分操作指南.mp4
-《雅思考试官方指南》(第2版)/《雅思手册》相关视频/雅思考试机考操作系统简介.mp4
《雅思考试官方指南》(第2版)/《雅思手册》相关视频/雅思考试机考听力部分操作指南.mp4
-《雅思考试官方指南》(第2版)/《雅思手册》相关视频/雅思视频通话口语考试流程.mp4
-《雅思考试官方指南》(第2版)/写作Task 2答题实例/05 Comments on Writing Samples.pdf
-《雅思考试官方指南》(第2版)/口语练习音频/01 IELTS Speaking Sample - Part 1.mp3
+《雅思考试官方指南》(第2版)/《雅思手册》相关视频/雅思考试机考写作部分操作指南.mp4
《雅思考试官方指南》(第2版)/《雅思手册》相关视频/雅思考试机考阅读部分操作指南.mp4
-《雅思考试官方指南》(第2版)/口语练习音频/04 IELTS Speaking Sample - Full.mp3
-《雅思考试官方指南》(第2版)/口语练习音频/03 IELTS Speaking Sample - Part 3.mp3
《雅思考试官方指南》(第2版)/口语练习音频/02 IELTS Speaking Sample - Part 2.mp3
+《雅思考试官方指南》(第2版)/口语练习音频/03 IELTS Speaking Sample - Part 3.mp3
+《雅思考试官方指南》(第2版)/口语练习音频/04 IELTS Speaking Sample - Full.mp3
《雅思考试官方指南》(第2版)/听力练习音频/01 Letters of the Alphabet.mp3
《雅思考试官方指南》(第2版)/听力练习音频/02 Groups of Letters.mp3
《雅思考试官方指南》(第2版)/听力练习音频/03 Spelling.mp3
@@ -17,33 +13,37 @@
《雅思考试官方指南》(第2版)/听力练习音频/06 Test Practice - Section 1.mp3
《雅思考试官方指南》(第2版)/听力练习音频/07 Matching Information.mp3
《雅思考试官方指南》(第2版)/听力练习音频/08 Multiple Choice.mp3
+《雅思考试官方指南》(第2版)/口语练习音频/01 IELTS Speaking Sample - Part 1.mp3
+《雅思考试官方指南》(第2版)/《雅思手册》相关视频/雅思视频通话口语考试流程.mp4
+《雅思考试官方指南》(第2版)/《雅思手册》相关视频/雅思考试机考操作系统简介.mp4
《雅思考试官方指南》(第2版)/听力练习音频/09 Test Practice - Section 2.mp3
-《雅思考试官方指南》(第2版)/听力练习音频/12 Sentence Completion.mp3
+《雅思考试官方指南》(第2版)/听力练习音频/10 Map 1.mp3
《雅思考试官方指南》(第2版)/听力练习音频/13 Test Practice - Section 3.mp3
《雅思考试官方指南》(第2版)/听力练习音频/14 Signposts.mp3
+《雅思考试官方指南》(第2版)/听力练习音频/15 Table Completion.mp3
《雅思考试官方指南》(第2版)/听力练习音频/16 Flow Chart Completion.mp3
《雅思考试官方指南》(第2版)/听力练习音频/17 Summary Completion.mp3
+《雅思考试官方指南》(第2版)/写作Task 2答题实例/05 Comments on Writing Samples.pdf
《雅思考试官方指南》(第2版)/听力练习音频/18 Test Practice - Section 4.mp3
-《雅思考试官方指南》(第2版)/模拟试题听力录音/01 Academic Test 1.mp3
+《雅思考试官方指南》(第2版)/听力练习音频/11 Map 2.mp3
+《雅思考试官方指南》(第2版)/听力练习音频/12 Sentence Completion.mp3
《雅思考试官方指南》(第2版)/模拟试题听力录音/02 Academic Test 2.mp3
-《雅思考试官方指南》(第2版)/听力练习音频/10 Map 1.mp3
-《雅思考试官方指南》(第2版)/模拟试题听力录音/04 Academic Test 4.mp3
-《雅思考试官方指南》(第2版)/模拟试题听力录音/03 Academic Test 3.mp3
-《雅思考试官方指南》(第2版)/视频:IELTS评分标准/02 Reading Band Descriptor.mp4
-《雅思考试官方指南》(第2版)/听力练习音频/15 Table Completion.mp3
+《雅思考试官方指南》(第2版)/模拟试题听力录音/01 Academic Test 1.mp3
+《雅思考试官方指南》(第2版)/视频:IELTS评分标准/01 Listening Band Descriptor.mp4
+《雅思考试官方指南》(第2版)/视频:IELTS评分标准/03 Writing Band Descriptor 1 - Task Response.mp4
《雅思考试官方指南》(第2版)/视频:IELTS评分标准/04 Writing Band Descriptor 2 - Coherence & Cohesion.mp4
《雅思考试官方指南》(第2版)/视频:IELTS评分标准/05 Writing Band Descriptor 3 - Lexical Resource.mp4
《雅思考试官方指南》(第2版)/视频:IELTS评分标准/06 Writing Band Descriptor 4 - Grammar.mp4
《雅思考试官方指南》(第2版)/视频:IELTS评分标准/07 Speaking Band Descriptor 1 - Fluency & Coherence.mp4
《雅思考试官方指南》(第2版)/视频:IELTS评分标准/08 Speaking Band Descriptor 2 - Lexical Resource.mp4
《雅思考试官方指南》(第2版)/视频:IELTS评分标准/09 Speaking Band Descriptor 3 - Grammar.mp4
-《雅思考试官方指南》(第2版)/视频:IELTS评分标准/10 Speaking Band Descriptor 4 - Pronunciation.mp4
+《雅思考试官方指南》(第2版)/视频:IELTS评分标准/02 Reading Band Descriptor.mp4
《雅思考试官方指南》(第2版)/视频:口语考试实况录像/01 Speaking Sample 1.mp4
《雅思考试官方指南》(第2版)/视频:口语考试实况录像/02 Speaking Sample 2.mp4
-《雅思考试官方指南》(第2版)/视频:口语考试实况录像/03 Speaking Sample 3.mp4
《雅思考试官方指南》(第2版)/视频:口语考试实况录像/04 Speaking Sample 4.mp4
+《雅思考试官方指南》(第2版)/视频:口语考试实况录像/03 Speaking Sample 3.mp4
《雅思考试官方指南》(第2版)/视频:口语考试实况录像/05 Comments on Speaking Samples.pdf
《雅思考试官方指南》(第2版)/视频:雅思写作指导/07 Video - POWER Writing.mp4
-《雅思考试官方指南》(第2版)/视频:IELTS评分标准/03 Writing Band Descriptor 1 - Task Response.mp4
-《雅思考试官方指南》(第2版)/听力练习音频/11 Map 2.mp3
-《雅思考试官方指南》(第2版)/视频:IELTS评分标准/01 Listening Band Descriptor.mp4
+《雅思考试官方指南》(第2版)/模拟试题听力录音/03 Academic Test 3.mp3
+《雅思考试官方指南》(第2版)/模拟试题听力录音/04 Academic Test 4.mp3
+《雅思考试官方指南》(第2版)/视频:IELTS评分标准/10 Speaking Band Descriptor 4 - Pronunciation.mp4
diff --git a/server.js b/server.js
index fa954fb..6f523ba 100644
--- a/server.js
+++ b/server.js
@@ -1,4 +1,3 @@
-// import fs, {stat} from 'node:fs';
import fs from 'node:fs';
import path from 'node:path';
@@ -7,73 +6,27 @@ const rootFolder = '/Users/xgqfrms-mm/Documents/github/IELTS-Guide-2th/docs/《
try {
let treeFilePath = rootFolder + `tree.md`;
if (!fs.existsSync(treeFilePath)) {
- fs.writeFileSync(treeFilePath, ``, err => {
- // init
- });
- } else {
- fs.writeFileSync(treeFilePath, ``, err => {
- // clear
- });
+ // do nothing
}
- // await fs.appendFile(rootFolder + `tree.md`, content);
- // fs.writeFile(rootFolder + `tree.md`, content, err => {
- // if (err) {
- // console.error(err);
- // } else {
- // // file written successfully
- // }
- // });
+ fs.writeFileSync(treeFilePath, ``, err => {
+ // init & clear
+ });
} catch (err) {
console.error(err);
}
-
-// const isFile = fileName => {
-// return fs.lstatSync(fileName).isFile() || false;
-// };
-// const isFolder = fileName => {
-// return fs.lstatSync(fileName).isDirectory() || false;
-// };
-
-const results = [];
-
-const treeGenerator = async (results = [], folderName = rootFolder) => {
- // 读取文件夹
- console.log(`🚀 folderName =`, folderName);
+const treeFlatRecursiveTraversal = async (folderName = rootFolder) => {
+ // console.log(`🚀 folderName =`, folderName);
await fs.readdirSync(folderName).map(fileName => {
// console.log(`❓ fileName =`, fileName);
- // path
const pathName = path.join(folderName, fileName);
- // stat(pathName, (err, stats) => {
fs.stat(pathName, async (err, stats) => {
// console.log(stats);
- // Stats {
- // dev: 16777220,
- // mode: 16877,
- // nlink: 12,
- // uid: 501,
- // gid: 20,
- // rdev: 0,
- // blksize: 4096,
- // ino: 64334171,
- // size: 384,
- // blocks: 0,
- // atimeMs: 1723572008018.5503,
- // mtimeMs: 1723572008013.725,
- // ctimeMs: 1723572008013.725,
- // birthtimeMs: 1723570190954.7646,
- // atime: 2024-08-13T18:00:08.019Z,
- // mtime: 2024-08-13T18:00:08.014Z,
- // ctime: 2024-08-13T18:00:08.014Z,
- // birthtime: 2024-08-13T17:29:50.955Z
- // }
- // console.log(stats.isDirectory());
if(stats.isDirectory()) {
// console.log(`🗂️ folderName =`, fileName);
- await treeGenerator(results, pathName)
+ await treeFlatRecursiveTraversal(pathName)
} else {
// console.log(`📂 fileName =`, fileName)
- // const relativePath = encodeURIComponent(pathName.replace(`/Users/xgqfrms-mm/Documents/github/IELTS-Guide-2th/docs/`, ``));
const relativePath = pathName.replace(`/Users/xgqfrms-mm/Documents/github/IELTS-Guide-2th/docs/`, ``);
let url = `https://ielts-guide-2nd.xgqfrms.xyz/${encodeURIComponent(relativePath)}`;
switch (relativePath) {
@@ -89,62 +42,22 @@ const treeGenerator = async (results = [], folderName = rootFolder) => {
case `《雅思考试官方指南》(第2版)/视频:口语考试实况录像/04 Speaking Sample 4.mp4`:
url = `https://www.bilibili.com/video/BV1hVeueRE42/`;
break;
- // default:
- // break;
+ default:
+ // do nothing
+ break;
}
const aLink = `${relativePath}
\n`;
- //
await fs.appendFile(rootFolder + `tree.md`, aLink, err => {
- //
+ err && console.log(`err =`, err)
});
- // await fs.appendFile(rootFolder + `tree.md`, pathName + `\n`, err => {
- // //
- // });
- results.push(pathName);
}
});
- // if(isFolder(fileName)) {
- // console.log(`🗂️ folderName =`, fileName)
- // } else {
- // console.log(`📂 fileName =`, fileName)
- // }
- // if(isFile(fileName)) {
- // console.log(`📂 fileName =`, fileName)
- // } else {
- // console.log(`🗂️ folderName =`, fileName)
- // }
- // let temp = path.join(folderPath, fileName);
});
}
try {
- await treeGenerator(results, rootFolder);
- // console.log(`results =`, results);
+ await treeFlatRecursiveTraversal(rootFolder);
+ console.log(`treeFlatRecursiveTraversal ✅`)
} catch (err) {
console.error(`error ❌ =`, err);
}
-
-
-
-
-
-
-
-/*
-
-https://nodejs.org/api/fs.html#fslstatsyncpath-options
-
-http://man7.org/linux/man-pages/man2/lstat.2.html
-
-stat, fstat, lstat, fstatat (get file status)
-
-
-
-https://nodejs.org/api/fs.html#fsstatpath-options-callback
-
-
-// __dirname
-
-https://stackoverflow.com/questions/46745014/alternative-for-dirname-in-node-js-when-using-es6-modules
-
-*/