Værktøj til Inspektion af Mapper
Dette kapitel præsenterer dig for en udfordring: at skabe en avanceret konsolapplikation ved navn DirInspect Pro. Denne applikation giver dig mulighed for grundigt at analysere enhver mappe og opnå indsigtsfuld statistik om dens filer og undermapper.
Udfordring
Forestil dig et scenarie, hvor du skal navigere gennem en labyrint af mapper, der indeholder vigtige filer og data. DirInspect Pro er din allierede på denne rejse og leverer omfattende indblik i mappens struktur og indhold.
Den Færdige Applikation
Gør dig klar til at udnytte DirInspect Pros funktioner. Applikationen vil give dig kritisk information, såsom
- Det samlede antal elementer;
- Den samlede størrelse af alle elementer;
- Navn og størrelse på den største fil;
- Den detaljerede liste over individuelle filnavne og størrelser.
To veje at vælge
Du har to veje foran dig.
- Den første er at tage udfordringen op direkte og finpudse dine færdigheder uden vejledning;
- Den anden er at følge en nyttig guide, der garanterer din succes.
Uanset hvilken vej du vælger, venter en givende rejse, der kulminerer i oprettelsen af en fængende og funktionel konsolapplikation.
Masterplan
- Trin 1: Importér nødvendige moduler;
- Trin 2: Definér getStats-funktion;
- Trin 3: Definér analyzeFile-funktion;
- Trin 4: Definér analyzeDirectory-funktion;
- Trin 5: Definér main-funktion og kald den;
- Konklusion;
- Fuld app-kode.
Trin 1: Importér nødvendige moduler
For at påbegynde denne rejse skal du bruge de rette værktøjer. Start med at importere to vigtige moduler: fs.promises til asynkron håndtering af filsystemet og path til effektiv håndtering af filstier.
const fs = require("fs").promises;
const path = require("path");
Trin 2: Definer getStats-funktionen
Den asynkrone funktion, getStats, modtager en sti til en fil eller mappe som argument og forsøger at hente dens statistik ved hjælp af fs.stat.
- Hvis det lykkes, returneres statistikken;
- Hvis der opstår en fejl, logges en fejlmeddelelse og der returneres
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;
}
}
Trin 3: Definer analyzeFile-funktionen
Funktionen analyzeFile anvender funktionen getStats til at hente statistik for en fil. Hvis statistik er tilgængelig (ikke null), returneres et objekt med filens navn (udtrukket med path.basename) og dens størrelse.
async function analyzeFile(filePath) {
const stats = await getStats(filePath);
if (!stats) return null;
return {
name: path.basename(filePath),
size: stats.size,
};
}
Trin 4: Definer analyzeDirectory-funktionen
Funktionen analyzeDirectory scanner en mappe og indsamler fuld statistik over dens indhold.
Sådan fungerer det: Den læser alle elementer i mappen ved hjælp af fs.readdir. For hvert element:
- Bygger den fulde sti med
path.join; - Bruger
getStatstil at afgøre, om det er en fil eller en mappe; - Hvis det er en fil:
- Kalder
analyzeFilefor at få{ name, size }; - Opdaterer totaler, største fil og fillisten.
- Kalder
- Hvis det er en mappe:
- Kalder rekursivt
analyzeDirectory; - Fletter resultaterne ind i den aktuelle statistik.
- Kalder rekursivt
async function analyzeDirectory(directoryPath) {
let totalItems = 0;
let totalFiles = 0;
let totalSize = 0;
let largestFile = { name: "", size: 0 };
let fileList = [];
try {
const items = await fs.readdir(directoryPath);
for (const item of items) {
const itemPath = path.join(directoryPath, item);
const stats = await getStats(itemPath);
if (!stats) continue;
totalItems++;
if (stats.isFile()) {
const fileInfo = await analyzeFile(itemPath);
if (!fileInfo) continue;
totalFiles++;
totalSize += fileInfo.size;
if (fileInfo.size > largestFile.size) {
largestFile = fileInfo;
}
fileList.push(fileInfo);
} 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: []
};
}
}
Trin 5: Definer main-funktion og kald den
main-funktionen er scriptets indgangspunkt. Den angiver stien til den mappe, der skal analyseres (i dette tilfælde ./docs), kalder funktionen analyzeDirectory for at indhente statistik over mappen og dens indhold, og udskriver derefter de indsamlede oplysninger.
Funktionen udskriver
- Samlet antal elementer;
- Samlet antal filer;
- Samlet størrelse;
- Detaljer om den største fil;
- Liste over filer i mappen.
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();
Fuldt app-kode
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) {
let totalItems = 0;
let totalFiles = 0;
let totalSize = 0;
let largestFile = { name: "", size: 0 };
let fileList = [];
try {
const items = await fs.readdir(directoryPath);
for (const item of items) {
const itemPath = path.join(directoryPath, item);
const stats = await getStats(itemPath);
if (!stats) continue;
totalItems++;
if (stats.isFile()) {
const fileInfo = await analyzeFile(itemPath);
if (!fileInfo) continue;
totalFiles++;
totalSize += fileInfo.size;
if (fileInfo.size > largestFile.size) {
largestFile = fileInfo;
}
fileList.push(fileInfo);
} 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();
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Fantastisk!
Completion rate forbedret til 2.56
Værktøj til Inspektion af Mapper
Stryg for at vise menuen
Dette kapitel præsenterer dig for en udfordring: at skabe en avanceret konsolapplikation ved navn DirInspect Pro. Denne applikation giver dig mulighed for grundigt at analysere enhver mappe og opnå indsigtsfuld statistik om dens filer og undermapper.
Udfordring
Forestil dig et scenarie, hvor du skal navigere gennem en labyrint af mapper, der indeholder vigtige filer og data. DirInspect Pro er din allierede på denne rejse og leverer omfattende indblik i mappens struktur og indhold.
Den Færdige Applikation
Gør dig klar til at udnytte DirInspect Pros funktioner. Applikationen vil give dig kritisk information, såsom
- Det samlede antal elementer;
- Den samlede størrelse af alle elementer;
- Navn og størrelse på den største fil;
- Den detaljerede liste over individuelle filnavne og størrelser.
To veje at vælge
Du har to veje foran dig.
- Den første er at tage udfordringen op direkte og finpudse dine færdigheder uden vejledning;
- Den anden er at følge en nyttig guide, der garanterer din succes.
Uanset hvilken vej du vælger, venter en givende rejse, der kulminerer i oprettelsen af en fængende og funktionel konsolapplikation.
Masterplan
- Trin 1: Importér nødvendige moduler;
- Trin 2: Definér getStats-funktion;
- Trin 3: Definér analyzeFile-funktion;
- Trin 4: Definér analyzeDirectory-funktion;
- Trin 5: Definér main-funktion og kald den;
- Konklusion;
- Fuld app-kode.
Trin 1: Importér nødvendige moduler
For at påbegynde denne rejse skal du bruge de rette værktøjer. Start med at importere to vigtige moduler: fs.promises til asynkron håndtering af filsystemet og path til effektiv håndtering af filstier.
const fs = require("fs").promises;
const path = require("path");
Trin 2: Definer getStats-funktionen
Den asynkrone funktion, getStats, modtager en sti til en fil eller mappe som argument og forsøger at hente dens statistik ved hjælp af fs.stat.
- Hvis det lykkes, returneres statistikken;
- Hvis der opstår en fejl, logges en fejlmeddelelse og der returneres
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;
}
}
Trin 3: Definer analyzeFile-funktionen
Funktionen analyzeFile anvender funktionen getStats til at hente statistik for en fil. Hvis statistik er tilgængelig (ikke null), returneres et objekt med filens navn (udtrukket med path.basename) og dens størrelse.
async function analyzeFile(filePath) {
const stats = await getStats(filePath);
if (!stats) return null;
return {
name: path.basename(filePath),
size: stats.size,
};
}
Trin 4: Definer analyzeDirectory-funktionen
Funktionen analyzeDirectory scanner en mappe og indsamler fuld statistik over dens indhold.
Sådan fungerer det: Den læser alle elementer i mappen ved hjælp af fs.readdir. For hvert element:
- Bygger den fulde sti med
path.join; - Bruger
getStatstil at afgøre, om det er en fil eller en mappe; - Hvis det er en fil:
- Kalder
analyzeFilefor at få{ name, size }; - Opdaterer totaler, største fil og fillisten.
- Kalder
- Hvis det er en mappe:
- Kalder rekursivt
analyzeDirectory; - Fletter resultaterne ind i den aktuelle statistik.
- Kalder rekursivt
async function analyzeDirectory(directoryPath) {
let totalItems = 0;
let totalFiles = 0;
let totalSize = 0;
let largestFile = { name: "", size: 0 };
let fileList = [];
try {
const items = await fs.readdir(directoryPath);
for (const item of items) {
const itemPath = path.join(directoryPath, item);
const stats = await getStats(itemPath);
if (!stats) continue;
totalItems++;
if (stats.isFile()) {
const fileInfo = await analyzeFile(itemPath);
if (!fileInfo) continue;
totalFiles++;
totalSize += fileInfo.size;
if (fileInfo.size > largestFile.size) {
largestFile = fileInfo;
}
fileList.push(fileInfo);
} 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: []
};
}
}
Trin 5: Definer main-funktion og kald den
main-funktionen er scriptets indgangspunkt. Den angiver stien til den mappe, der skal analyseres (i dette tilfælde ./docs), kalder funktionen analyzeDirectory for at indhente statistik over mappen og dens indhold, og udskriver derefter de indsamlede oplysninger.
Funktionen udskriver
- Samlet antal elementer;
- Samlet antal filer;
- Samlet størrelse;
- Detaljer om den største fil;
- Liste over filer i mappen.
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();
Fuldt app-kode
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) {
let totalItems = 0;
let totalFiles = 0;
let totalSize = 0;
let largestFile = { name: "", size: 0 };
let fileList = [];
try {
const items = await fs.readdir(directoryPath);
for (const item of items) {
const itemPath = path.join(directoryPath, item);
const stats = await getStats(itemPath);
if (!stats) continue;
totalItems++;
if (stats.isFile()) {
const fileInfo = await analyzeFile(itemPath);
if (!fileInfo) continue;
totalFiles++;
totalSize += fileInfo.size;
if (fileInfo.size > largestFile.size) {
largestFile = fileInfo;
}
fileList.push(fileInfo);
} 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();
Tak for dine kommentarer!