Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Verktøy for Kataloginspeksjon | Bygge Konsollapplikasjoner med Node.js
Backend-Utvikling med Node.js og Express.js

bookVerktøy for Kataloginspeksjon

Dette kapittelet gir deg en utfordring: å lage en avansert konsollapplikasjon kalt DirInspect Pro. Denne applikasjonen gir deg muligheten til å analysere enhver katalog grundig og få innsiktsfulle statistikker om filer og undermapper.

🏆 Utfordring venter

Se for deg et scenario der du må navigere gjennom en labyrint av mapper med 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 funksjonalitet. Applikasjonen 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 å løse 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 ender med å 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 applikasjonskode.

Steg 1: Importer nødvendige moduler

For å starte denne prosessen, trenger du riktige verktøy. Begynn med å importere to sentrale moduler: fs.promises for asynkron håndtering av filsystemet og path for effektiv håndtering av filbaner.

const fs = require("fs").promises;
const path = require("path");

Steg 2: Definer getStats-funksjonen

Den asynkrone funksjonen getStats tar en fil- eller katalogbane 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 statistikk er tilgjengelig (ikke null), returneres et objekt som inneholder filnavnet (hentet med path.basename) og filstø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 tar en katalogsti som argument og analyserer innholdet grundig.

  • Den starter med å lese elementene i katalogen ved hjelp av fs.readdir og itererer deretter gjennom hvert element;
  • For hvert element konstruerer den full sti med path.join og henter statistikk ved hjelp av funksjonen getStats;
  • Hvis stats indikerer at elementet er en fil, oppdateres filrelatert statistikk;
  • Hvis elementet er en underkatalog, kalles analyzeDirectory-funksjonen rekursivt for å analysere innholdet, og statistikken aggregeres.
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: [],
    };
  }
}

Steg 5: Definer main-funksjonen og kall den

Funksjonen main er startpunktet for skriptet. Den spesifiserer katalogstien som skal analyseres (i dette tilfellet ./docs), kaller funksjonen analyzeDirectory for å hente statistikk for katalogen og dens innhold, 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();

🎉 Konklusjon: Tilegnede ferdigheter

Med DirInspect Pro har du mestret kunsten å analysere kataloger som en profesjonell. Dette konsollprogrammet viser din evne til å hente ut filstatistikk, håndtere feil sømløst og avdekke meningsfulle innsikter om filer og underkataloger i en angitt katalog.

👨‍💻 Full App Code

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();

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 10

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Awesome!

Completion rate improved to 2.56

bookVerktøy for Kataloginspeksjon

Sveip for å vise menyen

Dette kapittelet gir deg en utfordring: å lage en avansert konsollapplikasjon kalt DirInspect Pro. Denne applikasjonen gir deg muligheten til å analysere enhver katalog grundig og få innsiktsfulle statistikker om filer og undermapper.

🏆 Utfordring venter

Se for deg et scenario der du må navigere gjennom en labyrint av mapper med 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 funksjonalitet. Applikasjonen 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 å løse 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 ender med å 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 applikasjonskode.

Steg 1: Importer nødvendige moduler

For å starte denne prosessen, trenger du riktige verktøy. Begynn med å importere to sentrale moduler: fs.promises for asynkron håndtering av filsystemet og path for effektiv håndtering av filbaner.

const fs = require("fs").promises;
const path = require("path");

Steg 2: Definer getStats-funksjonen

Den asynkrone funksjonen getStats tar en fil- eller katalogbane 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 statistikk er tilgjengelig (ikke null), returneres et objekt som inneholder filnavnet (hentet med path.basename) og filstø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 tar en katalogsti som argument og analyserer innholdet grundig.

  • Den starter med å lese elementene i katalogen ved hjelp av fs.readdir og itererer deretter gjennom hvert element;
  • For hvert element konstruerer den full sti med path.join og henter statistikk ved hjelp av funksjonen getStats;
  • Hvis stats indikerer at elementet er en fil, oppdateres filrelatert statistikk;
  • Hvis elementet er en underkatalog, kalles analyzeDirectory-funksjonen rekursivt for å analysere innholdet, og statistikken aggregeres.
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: [],
    };
  }
}

Steg 5: Definer main-funksjonen og kall den

Funksjonen main er startpunktet for skriptet. Den spesifiserer katalogstien som skal analyseres (i dette tilfellet ./docs), kaller funksjonen analyzeDirectory for å hente statistikk for katalogen og dens innhold, 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();

🎉 Konklusjon: Tilegnede ferdigheter

Med DirInspect Pro har du mestret kunsten å analysere kataloger som en profesjonell. Dette konsollprogrammet viser din evne til å hente ut filstatistikk, håndtere feil sømløst og avdekke meningsfulle innsikter om filer og underkataloger i en angitt katalog.

👨‍💻 Full App Code

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();

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 10
some-alt