Hakemiston Tarkastustyökalu
Tässä luvussa esitellään haaste: kehittyneen konsolisovelluksen DirInspect Pro luominen. Tämä sovellus mahdollistaa minkä tahansa hakemiston perusteellisen analysoinnin ja tarjoaa hyödyllistä tilastotietoa sen tiedostoista ja alihakemistoista.
Haaste
Kuvittele tilanne, jossa sinun täytyy navigoida kansioiden labyrintissä, joka sisältää tärkeitä tiedostoja ja dataa. DirInspect Pro on apunasi tällä matkalla, tarjoten kattavaa tietoa hakemiston rakenteesta ja sisällöstä.
Lopputuloksena oleva sovellus
Valmistaudu hyödyntämään DirInspect Pron ominaisuuksia. Sovellus tarjoaa keskeistä tietoa, kuten
- Kohteiden kokonaismäärä;
- Kaikkien kohteiden yhteenlaskettu koko;
- Suurimman tiedoston nimi ja koko;
- Yksittäisten tiedostojen nimet ja koot yksityiskohtaisesti.
Kaksi polkua valittavana
Edessäsi on kaksi polkua.
- Ensimmäinen on tarttua tähän haasteeseen suoraan, kehittäen taitojasi ilman ohjausta;
- Toinen on seurata hyödyllistä opasta, joka takaa onnistumisesi.
Valitsitpa kumman tahansa, edessäsi on palkitseva matka, jonka lopputuloksena syntyy kiehtova ja toimiva konsolisovellus.
Pääsuunnitelma
- Vaihe 1: Tuo tarvittavat moduulit;
- Vaihe 2: Määrittele getStats-funktio;
- Vaihe 3: Määrittele analyzeFile-funktio;
- Vaihe 4: Määrittele analyzeDirectory-funktio;
- Vaihe 5: Määrittele main-funktio ja kutsu se;
- Yhteenveto;
- Koko sovelluksen koodi.
Vaihe 1: Tuo tarvittavat moduulit
Tämän seikkailun aloittamiseksi tarvitset oikeat työkalut. Aloita tuomalla kaksi keskeistä moduulia: fs.promises tiedostojärjestelmän asynkroniseen hallintaan ja path tiedostopolkujen tehokkaaseen käsittelyyn.
const fs = require("fs").promises;
const path = require("path");
Vaihe 2: Määrittele getStats-funktio
Asynkroninen funktio getStats ottaa tiedoston tai hakemiston polun argumenttina ja yrittää hakea sen tilastotiedot käyttäen fs.stat-metodia.
- Onnistuneessa tapauksessa se palauttaa tilastotiedot;
- Jos virhe ilmenee, se kirjaa virheilmoituksen ja palauttaa
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;
}
}
Vaihe 3: Määrittele analyzeFile-funktio
Funktio analyzeFile käyttää getStats-funktiota hakeakseen tiedoston tilastotiedot. Jos tilastotiedot ovat saatavilla (eivät null), se palauttaa olion, joka sisältää tiedoston nimen (haettu käyttäen path.basename) ja sen koon.
async function analyzeFile(filePath) {
const stats = await getStats(filePath);
if (!stats) return null;
return {
name: path.basename(filePath),
size: stats.size,
};
}
Vaihe 4: Määrittele analyzeDirectory-funktio
Funktio analyzeDirectory ottaa hakemiston polun argumenttina ja analysoi sen sisällön kattavasti.
- Se aloittaa lukemalla hakemiston sisällä olevat kohteet käyttäen
fs.readdirja käy sitten läpi jokaisen kohteen; - Jokaiselle kohteelle muodostetaan täydellinen polku käyttäen
path.joinja haetaan sen tilastotiedotgetStats-funktion avulla; - Jos
statsosoittaa, että kohde on tiedosto, päivitetään tiedostoihin liittyvät tilastot; - Jos kohde on alihakemisto, kutsutaan rekursiivisesti
analyzeDirectory-funktiota analysoimaan sen sisältö ja tilastot yhdistetään.
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: [],
};
}
}
Vaihe 5: Määrittele main-funktio ja kutsu se
main-funktio toimii skriptin aloituspisteenä. Se määrittää analysoitavan hakemistopolun (tässä tapauksessa ./docs), kutsuu analyzeDirectory-funktiota saadakseen hakemiston ja sen sisällön tilastotiedot ja tulostaa kerätyt tiedot.
Funktio tulostaa
- Kohteiden kokonaismäärän;
- Tiedostojen kokonaismäärän;
- Kokonaiskoon;
- Suurimman tiedoston tiedot;
- Hakemiston tiedostoluettelon.
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();
Sovelluksen koko koodi
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();
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you explain how the app handles nested directories?
What happens if the specified directory does not exist?
Can I change the directory path to analyze a different folder?
Awesome!
Completion rate improved to 2.56
Hakemiston Tarkastustyökalu
Pyyhkäise näyttääksesi valikon
Tässä luvussa esitellään haaste: kehittyneen konsolisovelluksen DirInspect Pro luominen. Tämä sovellus mahdollistaa minkä tahansa hakemiston perusteellisen analysoinnin ja tarjoaa hyödyllistä tilastotietoa sen tiedostoista ja alihakemistoista.
Haaste
Kuvittele tilanne, jossa sinun täytyy navigoida kansioiden labyrintissä, joka sisältää tärkeitä tiedostoja ja dataa. DirInspect Pro on apunasi tällä matkalla, tarjoten kattavaa tietoa hakemiston rakenteesta ja sisällöstä.
Lopputuloksena oleva sovellus
Valmistaudu hyödyntämään DirInspect Pron ominaisuuksia. Sovellus tarjoaa keskeistä tietoa, kuten
- Kohteiden kokonaismäärä;
- Kaikkien kohteiden yhteenlaskettu koko;
- Suurimman tiedoston nimi ja koko;
- Yksittäisten tiedostojen nimet ja koot yksityiskohtaisesti.
Kaksi polkua valittavana
Edessäsi on kaksi polkua.
- Ensimmäinen on tarttua tähän haasteeseen suoraan, kehittäen taitojasi ilman ohjausta;
- Toinen on seurata hyödyllistä opasta, joka takaa onnistumisesi.
Valitsitpa kumman tahansa, edessäsi on palkitseva matka, jonka lopputuloksena syntyy kiehtova ja toimiva konsolisovellus.
Pääsuunnitelma
- Vaihe 1: Tuo tarvittavat moduulit;
- Vaihe 2: Määrittele getStats-funktio;
- Vaihe 3: Määrittele analyzeFile-funktio;
- Vaihe 4: Määrittele analyzeDirectory-funktio;
- Vaihe 5: Määrittele main-funktio ja kutsu se;
- Yhteenveto;
- Koko sovelluksen koodi.
Vaihe 1: Tuo tarvittavat moduulit
Tämän seikkailun aloittamiseksi tarvitset oikeat työkalut. Aloita tuomalla kaksi keskeistä moduulia: fs.promises tiedostojärjestelmän asynkroniseen hallintaan ja path tiedostopolkujen tehokkaaseen käsittelyyn.
const fs = require("fs").promises;
const path = require("path");
Vaihe 2: Määrittele getStats-funktio
Asynkroninen funktio getStats ottaa tiedoston tai hakemiston polun argumenttina ja yrittää hakea sen tilastotiedot käyttäen fs.stat-metodia.
- Onnistuneessa tapauksessa se palauttaa tilastotiedot;
- Jos virhe ilmenee, se kirjaa virheilmoituksen ja palauttaa
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;
}
}
Vaihe 3: Määrittele analyzeFile-funktio
Funktio analyzeFile käyttää getStats-funktiota hakeakseen tiedoston tilastotiedot. Jos tilastotiedot ovat saatavilla (eivät null), se palauttaa olion, joka sisältää tiedoston nimen (haettu käyttäen path.basename) ja sen koon.
async function analyzeFile(filePath) {
const stats = await getStats(filePath);
if (!stats) return null;
return {
name: path.basename(filePath),
size: stats.size,
};
}
Vaihe 4: Määrittele analyzeDirectory-funktio
Funktio analyzeDirectory ottaa hakemiston polun argumenttina ja analysoi sen sisällön kattavasti.
- Se aloittaa lukemalla hakemiston sisällä olevat kohteet käyttäen
fs.readdirja käy sitten läpi jokaisen kohteen; - Jokaiselle kohteelle muodostetaan täydellinen polku käyttäen
path.joinja haetaan sen tilastotiedotgetStats-funktion avulla; - Jos
statsosoittaa, että kohde on tiedosto, päivitetään tiedostoihin liittyvät tilastot; - Jos kohde on alihakemisto, kutsutaan rekursiivisesti
analyzeDirectory-funktiota analysoimaan sen sisältö ja tilastot yhdistetään.
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: [],
};
}
}
Vaihe 5: Määrittele main-funktio ja kutsu se
main-funktio toimii skriptin aloituspisteenä. Se määrittää analysoitavan hakemistopolun (tässä tapauksessa ./docs), kutsuu analyzeDirectory-funktiota saadakseen hakemiston ja sen sisällön tilastotiedot ja tulostaa kerätyt tiedot.
Funktio tulostaa
- Kohteiden kokonaismäärän;
- Tiedostojen kokonaismäärän;
- Kokonaiskoon;
- Suurimman tiedoston tiedot;
- Hakemiston tiedostoluettelon.
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();
Sovelluksen koko koodi
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();
Kiitos palautteestasi!