Verktøy for Kataloginspeksjon
Dette kapittelet gir deg en utfordring: å lage en avansert konsollapplikasjon kalt DirInspect Pro. Denne appen gir deg muligheten til å grundig analysere enhver katalog og få innsiktsfulle statistikker om dens filer og undermapper.
Utfordring
Se for deg et scenario der du må navigere gjennom en labyrint av mapper som inneholder viktige filer og data. DirInspect Pro er din hjelper på denne reisen, og gir deg omfattende innsikt i katalogens struktur og innhold.
Den ferdige applikasjonen
Gjør deg klar til å bruke DirInspect Pros funksjoner. Appen vil gi deg viktig informasjon, som
- Totalt antall elementer;
- Samlet størrelse på alle elementer;
- Navn og størrelse på den største filen;
- Detaljert liste over individuelle filnavn og størrelser.
To veier å velge
Du har to veier foran deg.
- Den første er å møte denne utfordringen direkte, og skjerpe ferdighetene dine uten veiledning;
- Den andre er å følge en nyttig guide som garanterer suksess.
Uansett hvilken vei du velger, venter en givende reise som kulminerer i å lage en engasjerende og funksjonell konsollapplikasjon.
Hovedplan
- Steg 1: Importer nødvendige moduler;
- Steg 2: Definer getStats-funksjonen;
- Steg 3: Definer analyzeFile-funksjonen;
- Steg 4: Definer analyzeDirectory-funksjonen;
- Steg 5: Definer main-funksjonen og kall den;
- Konklusjon;
- Full app-kode.
Steg 1: Importer nødvendige moduler
For å starte dette eventyret trenger du de riktige verktøyene. Begynn med å importere to sentrale moduler: fs.promises for å håndtere filsystemet asynkront og path for å håndtere filbaner effektivt.
const fs = require("fs").promises;
const path = require("path");
Steg 2: Definer getStats-funksjonen
Den asynkrone funksjonen, getStats, tar en fil- eller katalogsti som argument og forsøker å hente statistikk ved hjelp av fs.stat.
- Ved suksess returneres statistikken;
- Ved feil logges en feilmelding og funksjonen returnerer
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;
}
}
Steg 3: Definer analyzeFile-funksjonen
Funksjonen analyzeFile benytter getStats for å hente statistikk for en fil. Hvis statistikken er tilgjengelig (ikke null), returneres et objekt som inneholder filnavnet (hentet med path.basename) og størrelsen.
async function analyzeFile(filePath) {
const stats = await getStats(filePath);
if (!stats) return null;
return {
name: path.basename(filePath),
size: stats.size,
};
}
Steg 4: Definer analyzeDirectory-funksjonen
Funksjonen analyzeDirectory skanner en katalog og samler fullstendig statistikk om innholdet.
Slik fungerer det: Den leser alle elementer i katalogen ved hjelp av fs.readdir. For hvert element:
- Bygger full sti med
path.join; - Bruker
getStatsfor å avgjøre om det er en fil eller mappe; - Hvis det er en fil:
- Kaller
analyzeFilefor å hente{ name, size }; - Oppdaterer totaler, største fil og fillisten.
- Kaller
- Hvis det er en katalog:
- Kaller
analyzeDirectoryrekursivt; - Slår sammen resultatene med gjeldende statistikk.
- Kaller
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: []
};
}
}
Steg 5: Definer main-funksjonen og kall den
main-funksjonen er startpunktet for skriptet. Den angir katalogstien som skal analyseres (i dette tilfellet ./docs), kaller analyzeDirectory-funksjonen for å hente statistikk over katalogen og innholdet, og skriver deretter ut den innsamlede informasjonen.
Funksjonen skriver ut
- Totalt antall elementer;
- Totalt antall filer;
- Total størrelse;
- Detaljer om den største filen;
- Liste over filer i katalogen.
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();
Fullstendig applikasjonskode
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();
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Fantastisk!
Completion rate forbedret til 2.56
Verktøy for Kataloginspeksjon
Sveip for å vise menyen
Dette kapittelet gir deg en utfordring: å lage en avansert konsollapplikasjon kalt DirInspect Pro. Denne appen gir deg muligheten til å grundig analysere enhver katalog og få innsiktsfulle statistikker om dens filer og undermapper.
Utfordring
Se for deg et scenario der du må navigere gjennom en labyrint av mapper som inneholder viktige filer og data. DirInspect Pro er din hjelper på denne reisen, og gir deg omfattende innsikt i katalogens struktur og innhold.
Den ferdige applikasjonen
Gjør deg klar til å bruke DirInspect Pros funksjoner. Appen vil gi deg viktig informasjon, som
- Totalt antall elementer;
- Samlet størrelse på alle elementer;
- Navn og størrelse på den største filen;
- Detaljert liste over individuelle filnavn og størrelser.
To veier å velge
Du har to veier foran deg.
- Den første er å møte denne utfordringen direkte, og skjerpe ferdighetene dine uten veiledning;
- Den andre er å følge en nyttig guide som garanterer suksess.
Uansett hvilken vei du velger, venter en givende reise som kulminerer i å lage en engasjerende og funksjonell konsollapplikasjon.
Hovedplan
- Steg 1: Importer nødvendige moduler;
- Steg 2: Definer getStats-funksjonen;
- Steg 3: Definer analyzeFile-funksjonen;
- Steg 4: Definer analyzeDirectory-funksjonen;
- Steg 5: Definer main-funksjonen og kall den;
- Konklusjon;
- Full app-kode.
Steg 1: Importer nødvendige moduler
For å starte dette eventyret trenger du de riktige verktøyene. Begynn med å importere to sentrale moduler: fs.promises for å håndtere filsystemet asynkront og path for å håndtere filbaner effektivt.
const fs = require("fs").promises;
const path = require("path");
Steg 2: Definer getStats-funksjonen
Den asynkrone funksjonen, getStats, tar en fil- eller katalogsti som argument og forsøker å hente statistikk ved hjelp av fs.stat.
- Ved suksess returneres statistikken;
- Ved feil logges en feilmelding og funksjonen returnerer
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;
}
}
Steg 3: Definer analyzeFile-funksjonen
Funksjonen analyzeFile benytter getStats for å hente statistikk for en fil. Hvis statistikken er tilgjengelig (ikke null), returneres et objekt som inneholder filnavnet (hentet med path.basename) og størrelsen.
async function analyzeFile(filePath) {
const stats = await getStats(filePath);
if (!stats) return null;
return {
name: path.basename(filePath),
size: stats.size,
};
}
Steg 4: Definer analyzeDirectory-funksjonen
Funksjonen analyzeDirectory skanner en katalog og samler fullstendig statistikk om innholdet.
Slik fungerer det: Den leser alle elementer i katalogen ved hjelp av fs.readdir. For hvert element:
- Bygger full sti med
path.join; - Bruker
getStatsfor å avgjøre om det er en fil eller mappe; - Hvis det er en fil:
- Kaller
analyzeFilefor å hente{ name, size }; - Oppdaterer totaler, største fil og fillisten.
- Kaller
- Hvis det er en katalog:
- Kaller
analyzeDirectoryrekursivt; - Slår sammen resultatene med gjeldende statistikk.
- Kaller
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: []
};
}
}
Steg 5: Definer main-funksjonen og kall den
main-funksjonen er startpunktet for skriptet. Den angir katalogstien som skal analyseres (i dette tilfellet ./docs), kaller analyzeDirectory-funksjonen for å hente statistikk over katalogen og innholdet, og skriver deretter ut den innsamlede informasjonen.
Funksjonen skriver ut
- Totalt antall elementer;
- Totalt antall filer;
- Total størrelse;
- Detaljer om den største filen;
- Liste over filer i katalogen.
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();
Fullstendig applikasjonskode
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();
Takk for tilbakemeldingene dine!