Інструмент для Перевірки Директорій
У цьому розділі вам пропонується завдання: створити розширений консольний застосунок під назвою DirInspect Pro. Цей застосунок дозволить детально аналізувати будь-який каталог і отримувати корисну статистику щодо його файлів та підкаталогів.
🏆 Виклик чекає
Уявіть ситуацію, коли потрібно орієнтуватися у лабіринті папок із важливими файлами та даними. DirInspect Pro стане вашим помічником у цій подорожі, надаючи повну інформацію про структуру та вміст каталогу.
🚀 Результуючий застосунок
Підготуйтеся використовувати можливості DirInspect Pro. Застосунок надасть вам важливу інформацію, таку як:
- Загальна кількість елементів;
- Сукупний розмір усіх елементів;
- Назва та розмір найбільшого файлу;
- Детальний список імен та розмірів окремих файлів.
Два шляхи на вибір
Перед вами два шляхи.
- Перший — вирішити це завдання самостійно, вдосконалюючи свої навички без підказок;
- Другий — скористатися корисним гайдом, який гарантує успіх.
Який би шлях ви не обрали, на вас чекає захоплююча подорож, результатом якої стане створення функціонального та цікавого консольного застосунку.
Майстер-план
- 👉 Крок 1: Імпорт необхідних модулів;
- 👉 Крок 2: Визначення функції getStats;
- 👉 Крок 3: Визначення функції analyzeFile;
- 👉 Крок 4: Визначення функції analyzeDirectory;
- 👉 Крок 5: Визначення та виклик функції main;
- 🎉 Висновок;
- 🏁 Повний код застосунку.
Крок 1: Імпорт необхідних модулів
Для початку роботи вам знадобляться відповідні інструменти. Почніть з імпорту двох основних модулів: fs.promises для асинхронного керування файловою системою та path для ефективної роботи з шляхами до файлів.
const fs = require("fs").promises;
const path = require("path");
Крок 2: Визначення функції getStats
Асинхронна функція getStats приймає шлях до файлу або директорії як аргумент і намагається отримати її статистику за допомогою fs.stat.
- У разі успіху повертає статистику;
- У разі помилки виводить повідомлення про помилку та повертає
null.
async function getStats(filePath) {
try {
const stats = await fs.stat(filePath);
return stats;
} catch (err) {
console.error("Error getting stats:", err.message);
return null;
}
}
Крок 3: Визначення функції analyzeFile
Функція analyzeFile використовує функцію getStats для отримання статистики файлу. Якщо статистика доступна (не null), повертає об'єкт, що містить ім'я файлу (отримане за допомогою path.basename) та його розмір.
async function analyzeFile(filePath) {
const stats = await getStats(filePath);
if (!stats) return null;
return {
name: path.basename(filePath),
size: stats.size,
};
}
Крок 4: Визначення функції analyzeDirectory
Функція analyzeDirectory приймає шлях до директорії як аргумент і всебічно аналізує її вміст.
- Спочатку вона зчитує елементи в директорії за допомогою
fs.readdir, а потім ітерує кожен елемент; - Для кожного елемента створює повний шлях за допомогою
path.joinі отримує його статистику через функціюgetStats; - Якщо
statsвказує, що елемент є файлом, оновлює статистику, пов'язану з файлами; - Якщо елемент є піддиректорією, рекурсивно викликає функцію
analyzeDirectoryдля аналізу її вмісту і потім агрегує статистику.
async function analyzeDirectory(directoryPath) {
try {
const items = await fs.readdir(directoryPath);
let totalItems = 0;
let totalFiles = 0;
let totalSize = 0;
let largestFile = { name: "", size: 0 };
let fileList = [];
for (const item of items) {
const itemPath = path.join(directoryPath, item);
const stats = await getStats(itemPath);
if (!stats) continue;
totalItems++;
if (stats.isFile()) {
totalFiles++;
totalSize += stats.size;
if (stats.size > largestFile.size) {
largestFile = { name: item, size: stats.size };
}
fileList.push({ name: item, size: stats.size });
} else if (stats.isDirectory()) {
const subDirectoryStats = await analyzeDirectory(itemPath);
totalItems += subDirectoryStats.totalItems;
totalFiles += subDirectoryStats.totalFiles;
totalSize += subDirectoryStats.totalSize;
if (subDirectoryStats.largestFile.size > largestFile.size) {
largestFile = subDirectoryStats.largestFile;
}
fileList = fileList.concat(subDirectoryStats.fileList);
}
}
return {
totalItems,
totalFiles,
totalSize,
largestFile,
fileList,
};
} catch (err) {
console.error("Error analyzing directory contents:", err.message);
return {
totalItems: 0,
totalFiles: 0,
totalSize: 0,
largestFile: { name: "", size: 0 },
fileList: [],
};
}
}
Крок 5: Визначення функції main та її виклик
Функція main є точкою входу скрипта. Вона задає шлях до директорії для аналізу (у цьому випадку, ./docs), викликає функцію analyzeDirectory для отримання статистики директорії та її вмісту, а потім виводить зібрану інформацію.
Функція виводить
- загальну кількість елементів;
- загальну кількість файлів;
- загальний розмір;
- деталі про найбільший файл;
- список файлів у директорії.
async function main() {
const directoryPath = "./docs";
const directoryStats = await analyzeDirectory(directoryPath);
console.log("Directory Analysis:");
console.log("Total items:", directoryStats.totalItems);
console.log("Total files:", directoryStats.totalFiles);
console.log("Total size (bytes):", directoryStats.totalSize);
console.log(
"Largest file:",
directoryStats.largestFile.name,
"Size:",
directoryStats.largestFile.size,
"bytes"
);
console.log("\nFile List:");
for (const file of directoryStats.fileList) {
console.log(file.name, "Size:", file.size, "bytes");
}
}
main();
🎉 Висновок: Опрацьовані навички
З DirInspect Pro ви опанували мистецтво аналізу директорій на професійному рівні. Ця консольна програма демонструє вашу здатність отримувати статистику файлів, безпомилково обробляти помилки та виявляти важливу інформацію про файли й піддиректорії у вказаній директорії.
👨💻 Повний код застосунку
const fs = require("fs").promises;
const path = require("path");
async function getStats(filePath) {
try {
const stats = await fs.stat(filePath);
return stats;
} catch (err) {
console.error("Error getting stats:", err.message);
return null;
}
}
async function analyzeFile(filePath) {
const stats = await getStats(filePath);
if (!stats) return null;
return {
name: path.basename(filePath),
size: stats.size,
};
}
async function analyzeDirectory(directoryPath) {
try {
const items = await fs.readdir(directoryPath);
let totalItems = 0;
let totalFiles = 0;
let totalSize = 0;
let largestFile = { name: "", size: 0 };
let fileList = [];
for (const item of items) {
const itemPath = path.join(directoryPath, item);
const stats = await getStats(itemPath);
if (!stats) continue;
totalItems++;
if (stats.isFile()) {
totalFiles++;
totalSize += stats.size;
if (stats.size > largestFile.size) {
largestFile = { name: item, size: stats.size };
}
fileList.push({ name: item, size: stats.size });
} else if (stats.isDirectory()) {
const subDirectoryStats = await analyzeDirectory(itemPath);
totalItems += subDirectoryStats.totalItems;
totalFiles += subDirectoryStats.totalFiles;
totalSize += subDirectoryStats.totalSize;
if (subDirectoryStats.largestFile.size > largestFile.size) {
largestFile = subDirectoryStats.largestFile;
}
fileList = fileList.concat(subDirectoryStats.fileList);
}
}
return {
totalItems,
totalFiles,
totalSize,
largestFile,
fileList,
};
} catch (err) {
console.error("Error analyzing directory contents:", err.message);
return {
totalItems: 0,
totalFiles: 0,
totalSize: 0,
largestFile: { name: "", size: 0 },
fileList: [],
};
}
}
async function main() {
const directoryPath = "./docs";
const directoryStats = await analyzeDirectory(directoryPath);
console.log("Directory Analysis:");
console.log("Total items:", directoryStats.totalItems);
console.log("Total files:", directoryStats.totalFiles);
console.log("Total size (bytes):", directoryStats.totalSize);
console.log(
"Largest file:",
directoryStats.largestFile.name,
"Size:",
directoryStats.largestFile.size,
"bytes"
);
console.log("\nFile List:");
for (const file of directoryStats.fileList) {
console.log(file.name, "Size:", file.size, "bytes");
}
}
main();
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Can you explain how the recursive analysis in analyzeDirectory works?
What happens if the specified directory does not exist?
How can I modify the app to analyze a different directory?
Awesome!
Completion rate improved to 2.56
Інструмент для Перевірки Директорій
Свайпніть щоб показати меню
У цьому розділі вам пропонується завдання: створити розширений консольний застосунок під назвою DirInspect Pro. Цей застосунок дозволить детально аналізувати будь-який каталог і отримувати корисну статистику щодо його файлів та підкаталогів.
🏆 Виклик чекає
Уявіть ситуацію, коли потрібно орієнтуватися у лабіринті папок із важливими файлами та даними. DirInspect Pro стане вашим помічником у цій подорожі, надаючи повну інформацію про структуру та вміст каталогу.
🚀 Результуючий застосунок
Підготуйтеся використовувати можливості DirInspect Pro. Застосунок надасть вам важливу інформацію, таку як:
- Загальна кількість елементів;
- Сукупний розмір усіх елементів;
- Назва та розмір найбільшого файлу;
- Детальний список імен та розмірів окремих файлів.
Два шляхи на вибір
Перед вами два шляхи.
- Перший — вирішити це завдання самостійно, вдосконалюючи свої навички без підказок;
- Другий — скористатися корисним гайдом, який гарантує успіх.
Який би шлях ви не обрали, на вас чекає захоплююча подорож, результатом якої стане створення функціонального та цікавого консольного застосунку.
Майстер-план
- 👉 Крок 1: Імпорт необхідних модулів;
- 👉 Крок 2: Визначення функції getStats;
- 👉 Крок 3: Визначення функції analyzeFile;
- 👉 Крок 4: Визначення функції analyzeDirectory;
- 👉 Крок 5: Визначення та виклик функції main;
- 🎉 Висновок;
- 🏁 Повний код застосунку.
Крок 1: Імпорт необхідних модулів
Для початку роботи вам знадобляться відповідні інструменти. Почніть з імпорту двох основних модулів: fs.promises для асинхронного керування файловою системою та path для ефективної роботи з шляхами до файлів.
const fs = require("fs").promises;
const path = require("path");
Крок 2: Визначення функції getStats
Асинхронна функція getStats приймає шлях до файлу або директорії як аргумент і намагається отримати її статистику за допомогою fs.stat.
- У разі успіху повертає статистику;
- У разі помилки виводить повідомлення про помилку та повертає
null.
async function getStats(filePath) {
try {
const stats = await fs.stat(filePath);
return stats;
} catch (err) {
console.error("Error getting stats:", err.message);
return null;
}
}
Крок 3: Визначення функції analyzeFile
Функція analyzeFile використовує функцію getStats для отримання статистики файлу. Якщо статистика доступна (не null), повертає об'єкт, що містить ім'я файлу (отримане за допомогою path.basename) та його розмір.
async function analyzeFile(filePath) {
const stats = await getStats(filePath);
if (!stats) return null;
return {
name: path.basename(filePath),
size: stats.size,
};
}
Крок 4: Визначення функції analyzeDirectory
Функція analyzeDirectory приймає шлях до директорії як аргумент і всебічно аналізує її вміст.
- Спочатку вона зчитує елементи в директорії за допомогою
fs.readdir, а потім ітерує кожен елемент; - Для кожного елемента створює повний шлях за допомогою
path.joinі отримує його статистику через функціюgetStats; - Якщо
statsвказує, що елемент є файлом, оновлює статистику, пов'язану з файлами; - Якщо елемент є піддиректорією, рекурсивно викликає функцію
analyzeDirectoryдля аналізу її вмісту і потім агрегує статистику.
async function analyzeDirectory(directoryPath) {
try {
const items = await fs.readdir(directoryPath);
let totalItems = 0;
let totalFiles = 0;
let totalSize = 0;
let largestFile = { name: "", size: 0 };
let fileList = [];
for (const item of items) {
const itemPath = path.join(directoryPath, item);
const stats = await getStats(itemPath);
if (!stats) continue;
totalItems++;
if (stats.isFile()) {
totalFiles++;
totalSize += stats.size;
if (stats.size > largestFile.size) {
largestFile = { name: item, size: stats.size };
}
fileList.push({ name: item, size: stats.size });
} else if (stats.isDirectory()) {
const subDirectoryStats = await analyzeDirectory(itemPath);
totalItems += subDirectoryStats.totalItems;
totalFiles += subDirectoryStats.totalFiles;
totalSize += subDirectoryStats.totalSize;
if (subDirectoryStats.largestFile.size > largestFile.size) {
largestFile = subDirectoryStats.largestFile;
}
fileList = fileList.concat(subDirectoryStats.fileList);
}
}
return {
totalItems,
totalFiles,
totalSize,
largestFile,
fileList,
};
} catch (err) {
console.error("Error analyzing directory contents:", err.message);
return {
totalItems: 0,
totalFiles: 0,
totalSize: 0,
largestFile: { name: "", size: 0 },
fileList: [],
};
}
}
Крок 5: Визначення функції main та її виклик
Функція main є точкою входу скрипта. Вона задає шлях до директорії для аналізу (у цьому випадку, ./docs), викликає функцію analyzeDirectory для отримання статистики директорії та її вмісту, а потім виводить зібрану інформацію.
Функція виводить
- загальну кількість елементів;
- загальну кількість файлів;
- загальний розмір;
- деталі про найбільший файл;
- список файлів у директорії.
async function main() {
const directoryPath = "./docs";
const directoryStats = await analyzeDirectory(directoryPath);
console.log("Directory Analysis:");
console.log("Total items:", directoryStats.totalItems);
console.log("Total files:", directoryStats.totalFiles);
console.log("Total size (bytes):", directoryStats.totalSize);
console.log(
"Largest file:",
directoryStats.largestFile.name,
"Size:",
directoryStats.largestFile.size,
"bytes"
);
console.log("\nFile List:");
for (const file of directoryStats.fileList) {
console.log(file.name, "Size:", file.size, "bytes");
}
}
main();
🎉 Висновок: Опрацьовані навички
З DirInspect Pro ви опанували мистецтво аналізу директорій на професійному рівні. Ця консольна програма демонструє вашу здатність отримувати статистику файлів, безпомилково обробляти помилки та виявляти важливу інформацію про файли й піддиректорії у вказаній директорії.
👨💻 Повний код застосунку
const fs = require("fs").promises;
const path = require("path");
async function getStats(filePath) {
try {
const stats = await fs.stat(filePath);
return stats;
} catch (err) {
console.error("Error getting stats:", err.message);
return null;
}
}
async function analyzeFile(filePath) {
const stats = await getStats(filePath);
if (!stats) return null;
return {
name: path.basename(filePath),
size: stats.size,
};
}
async function analyzeDirectory(directoryPath) {
try {
const items = await fs.readdir(directoryPath);
let totalItems = 0;
let totalFiles = 0;
let totalSize = 0;
let largestFile = { name: "", size: 0 };
let fileList = [];
for (const item of items) {
const itemPath = path.join(directoryPath, item);
const stats = await getStats(itemPath);
if (!stats) continue;
totalItems++;
if (stats.isFile()) {
totalFiles++;
totalSize += stats.size;
if (stats.size > largestFile.size) {
largestFile = { name: item, size: stats.size };
}
fileList.push({ name: item, size: stats.size });
} else if (stats.isDirectory()) {
const subDirectoryStats = await analyzeDirectory(itemPath);
totalItems += subDirectoryStats.totalItems;
totalFiles += subDirectoryStats.totalFiles;
totalSize += subDirectoryStats.totalSize;
if (subDirectoryStats.largestFile.size > largestFile.size) {
largestFile = subDirectoryStats.largestFile;
}
fileList = fileList.concat(subDirectoryStats.fileList);
}
}
return {
totalItems,
totalFiles,
totalSize,
largestFile,
fileList,
};
} catch (err) {
console.error("Error analyzing directory contents:", err.message);
return {
totalItems: 0,
totalFiles: 0,
totalSize: 0,
largestFile: { name: "", size: 0 },
fileList: [],
};
}
}
async function main() {
const directoryPath = "./docs";
const directoryStats = await analyzeDirectory(directoryPath);
console.log("Directory Analysis:");
console.log("Total items:", directoryStats.totalItems);
console.log("Total files:", directoryStats.totalFiles);
console.log("Total size (bytes):", directoryStats.totalSize);
console.log(
"Largest file:",
directoryStats.largestFile.name,
"Size:",
directoryStats.largestFile.size,
"bytes"
);
console.log("\nFile List:");
for (const file of directoryStats.fileList) {
console.log(file.name, "Size:", file.size, "bytes");
}
}
main();
Дякуємо за ваш відгук!