Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Værktøj til Inspektion af Mapper | Opbygning af Konsolapplikationer med Node.js
Backend-Udvikling med Node.js og Express.js

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 app 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 giver dig omfattende indsigt i mappens struktur og indhold.

Den færdige applikation

Gør dig klar til at udnytte DirInspect Pros funktioner. Applikationen giver dig vigtig information, såsom

  • Det samlede antal elementer;
  • Den samlede størrelse af alle elementer;
  • Navn og størrelse på den største fil;
  • En detaljeret liste over individuelle filnavne og størrelser.

To veje at vælge imellem

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 hjælpsom guide, der garanterer din succes.

Uanset hvilken vej du vælger, venter der 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 opgave 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");
Kodebeskrivelse
expand arrow
  • Linje 1: importerer det indbyggede fs-modul. .promises-egenskaben giver adgang til API'et baseret på promises, hvilket muliggør asynkrone filoperationer med async/await;
  • Linje 2: importerer det indbyggede path-modul. Dette modul tilbyder værktøjer til at arbejde med fil- og mappestier, herunder manipulation og normalisering af stier.

Trin 2: Definer getStats-funktionen

Den asynkrone funktion, getStats, tager 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;
  }
}
Kodebeskrivelse
expand arrow
  • Linje 1: erklærer en asynkron funktion ved navn getStats, der accepterer en parameter filePath;
  • Linje 2, 5: opretter et try...catch-blok, der bruges til fejlhåndtering under den asynkrone operation;
  • Linje 3: bruger await fs.stat(filePath) til at hente information om den angivne fil, såsom dens størrelse, oprettelsestidspunkt og anden metadata;
  • Linje 4: returnerer stats-objektet, hvis fs.stat()-operationen gennemføres succesfuldt;
  • Linje 6: logger en fejlmeddelelse til konsollen ved hjælp af console.error(), hvis operationen fejler;
  • Linje 7: returnerer null for at indikere, at filstatistikken ikke kunne hentes.

Trin 3: Definer analyzeFile-funktionen

Funktionen analyzeFile bruger funktionen getStats til at hente statistik for en fil. Hvis statistik er tilgængelig (ikke null), returneres et objekt, der indeholder 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,
  };
}
Kodebeskrivelse
expand arrow
  • Linje 1: erklærer en asynkron funktion ved navn analyzeFile, der accepterer en filePath parameter;
  • Linje 2: bruger await getStats(filePath) til at hente filstatistik for den angivne sti;
  • Linje 3: kontrollerer om stats er falsk. Hvis statistikken ikke kunne hentes, returnerer funktionen null;
  • Linje 5-8: opretter og returnerer et objekt, der indeholder filnavn og filstørrelse. Filnavnet udtrækkes med path.basename(filePath), mens størrelsen hentes fra stats.size.

Trin 4: Definer analyzeDirectory-funktionen

Funktionen analyzeDirectory scanner en mappe og indsamler fuld statistik om 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 getStats til at afgøre, om det er en fil eller en mappe;
  • Hvis det er en fil:
    • Kalder analyzeFile for at få { name, size };
    • Opdaterer totaler, største fil og fillisten.
  • Hvis det er en mappe:
    • Kalder rekursivt analyzeDirectory;
    • Fletter resultaterne ind i den aktuelle statistik.
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: []
    };
  }
}
Kodebeskrivelse
expand arrow
  • Linje 1: erklærer en asynkron funktion ved navn analyzeDirectory, der accepterer en directoryPath parameter;

  • Linje 2-6: initialiserer variabler, der bruges til at gemme mappestatistik, inklusive antal elementer, antal filer, samlet størrelse, største fil og en liste over analyserede filer;

  • Linje 8: starter et try-blok for at håndtere potentielle filsystemfejl;

  • Linje 9: læser indholdet af mappen ved hjælp af fs.readdir() og gemmer resultatet i items arrayet;

  • Linje 11: starter et for...of-loop for at iterere gennem hvert element i mappen;

  • Linje 12: opretter den fulde sti for det aktuelle element ved hjælp af path.join();

  • Linje 13: henter statistik for det aktuelle element ved hjælp af getStats();

  • Linje 14: springer det aktuelle element over, hvis dets statistik ikke kunne hentes;

  • Linje 16: øger totalItems for hver succesfuldt behandlede fil eller mappe;

  • Linje 18-29: håndterer filbehandling:

  • Linje 19: kalder analyzeFile() for at hente filnavn og størrelse;

  • Linje 20: springer filen over, hvis analysen fejler;

    • Linje 22-23: opdaterer det samlede antal filer og akkumuleret filstørrelse;
    • Linje 25-27: opdaterer largestFile, hvis den aktuelle fil er større end den tidligere registrerede;
  • Linje 29: tilføjer filinformationen til fileList;

  • Linje 30-42: håndterer mappebehandling:

  • Linje 31: kalder rekursivt analyzeDirectory() for undermappen;

    • Linje 33-35: fletter undermappens statistik ind i de aktuelle totaler;
    • Linje 37-39: opdaterer largestFile, hvis undermappen indeholder en større fil;
  • Linje 41: fletter fillister ved hjælp af concat();

  • Linje 45-50: returnerer et objekt, der indeholder den endelige mappestatistik;

  • Linje 52-62: håndterer fejl ved at logge en besked og returnere et standardstatistik-objekt.

Trin 5: Definer main-funktionen 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();
Kodebeskrivelse
expand arrow
  • Linje 1: erklærer en asynkron funktion ved navn main;

  • Linje 2: definerer variablen directoryPath, som gemmer stien til den mappe, der skal analyseres;

  • Linje 3: kalder analyzeDirectory() med den angivne directoryPath og gemmer resultatet i variablen directoryStats ved hjælp af await;

  • Linje 5-17: viser de beregnede mappe-statistikker ved hjælp af console.log(), inklusive samlet antal elementer, samlede filer, samlet størrelse og information om den største fil;

  • Linje 18-20: gennemløber arrayet fileList, som er gemt i directoryStats;

  • logger navn og størrelse på hver fil i mappen;

  • Linje 23: kalder funktionen main() for at starte analyseprocessen.

Fuld applikationskode

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();
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 10

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

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 app 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 giver dig omfattende indsigt i mappens struktur og indhold.

Den færdige applikation

Gør dig klar til at udnytte DirInspect Pros funktioner. Applikationen giver dig vigtig information, såsom

  • Det samlede antal elementer;
  • Den samlede størrelse af alle elementer;
  • Navn og størrelse på den største fil;
  • En detaljeret liste over individuelle filnavne og størrelser.

To veje at vælge imellem

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 hjælpsom guide, der garanterer din succes.

Uanset hvilken vej du vælger, venter der 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 opgave 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");
Kodebeskrivelse
expand arrow
  • Linje 1: importerer det indbyggede fs-modul. .promises-egenskaben giver adgang til API'et baseret på promises, hvilket muliggør asynkrone filoperationer med async/await;
  • Linje 2: importerer det indbyggede path-modul. Dette modul tilbyder værktøjer til at arbejde med fil- og mappestier, herunder manipulation og normalisering af stier.

Trin 2: Definer getStats-funktionen

Den asynkrone funktion, getStats, tager 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;
  }
}
Kodebeskrivelse
expand arrow
  • Linje 1: erklærer en asynkron funktion ved navn getStats, der accepterer en parameter filePath;
  • Linje 2, 5: opretter et try...catch-blok, der bruges til fejlhåndtering under den asynkrone operation;
  • Linje 3: bruger await fs.stat(filePath) til at hente information om den angivne fil, såsom dens størrelse, oprettelsestidspunkt og anden metadata;
  • Linje 4: returnerer stats-objektet, hvis fs.stat()-operationen gennemføres succesfuldt;
  • Linje 6: logger en fejlmeddelelse til konsollen ved hjælp af console.error(), hvis operationen fejler;
  • Linje 7: returnerer null for at indikere, at filstatistikken ikke kunne hentes.

Trin 3: Definer analyzeFile-funktionen

Funktionen analyzeFile bruger funktionen getStats til at hente statistik for en fil. Hvis statistik er tilgængelig (ikke null), returneres et objekt, der indeholder 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,
  };
}
Kodebeskrivelse
expand arrow
  • Linje 1: erklærer en asynkron funktion ved navn analyzeFile, der accepterer en filePath parameter;
  • Linje 2: bruger await getStats(filePath) til at hente filstatistik for den angivne sti;
  • Linje 3: kontrollerer om stats er falsk. Hvis statistikken ikke kunne hentes, returnerer funktionen null;
  • Linje 5-8: opretter og returnerer et objekt, der indeholder filnavn og filstørrelse. Filnavnet udtrækkes med path.basename(filePath), mens størrelsen hentes fra stats.size.

Trin 4: Definer analyzeDirectory-funktionen

Funktionen analyzeDirectory scanner en mappe og indsamler fuld statistik om 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 getStats til at afgøre, om det er en fil eller en mappe;
  • Hvis det er en fil:
    • Kalder analyzeFile for at få { name, size };
    • Opdaterer totaler, største fil og fillisten.
  • Hvis det er en mappe:
    • Kalder rekursivt analyzeDirectory;
    • Fletter resultaterne ind i den aktuelle statistik.
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: []
    };
  }
}
Kodebeskrivelse
expand arrow
  • Linje 1: erklærer en asynkron funktion ved navn analyzeDirectory, der accepterer en directoryPath parameter;

  • Linje 2-6: initialiserer variabler, der bruges til at gemme mappestatistik, inklusive antal elementer, antal filer, samlet størrelse, største fil og en liste over analyserede filer;

  • Linje 8: starter et try-blok for at håndtere potentielle filsystemfejl;

  • Linje 9: læser indholdet af mappen ved hjælp af fs.readdir() og gemmer resultatet i items arrayet;

  • Linje 11: starter et for...of-loop for at iterere gennem hvert element i mappen;

  • Linje 12: opretter den fulde sti for det aktuelle element ved hjælp af path.join();

  • Linje 13: henter statistik for det aktuelle element ved hjælp af getStats();

  • Linje 14: springer det aktuelle element over, hvis dets statistik ikke kunne hentes;

  • Linje 16: øger totalItems for hver succesfuldt behandlede fil eller mappe;

  • Linje 18-29: håndterer filbehandling:

  • Linje 19: kalder analyzeFile() for at hente filnavn og størrelse;

  • Linje 20: springer filen over, hvis analysen fejler;

    • Linje 22-23: opdaterer det samlede antal filer og akkumuleret filstørrelse;
    • Linje 25-27: opdaterer largestFile, hvis den aktuelle fil er større end den tidligere registrerede;
  • Linje 29: tilføjer filinformationen til fileList;

  • Linje 30-42: håndterer mappebehandling:

  • Linje 31: kalder rekursivt analyzeDirectory() for undermappen;

    • Linje 33-35: fletter undermappens statistik ind i de aktuelle totaler;
    • Linje 37-39: opdaterer largestFile, hvis undermappen indeholder en større fil;
  • Linje 41: fletter fillister ved hjælp af concat();

  • Linje 45-50: returnerer et objekt, der indeholder den endelige mappestatistik;

  • Linje 52-62: håndterer fejl ved at logge en besked og returnere et standardstatistik-objekt.

Trin 5: Definer main-funktionen 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();
Kodebeskrivelse
expand arrow
  • Linje 1: erklærer en asynkron funktion ved navn main;

  • Linje 2: definerer variablen directoryPath, som gemmer stien til den mappe, der skal analyseres;

  • Linje 3: kalder analyzeDirectory() med den angivne directoryPath og gemmer resultatet i variablen directoryStats ved hjælp af await;

  • Linje 5-17: viser de beregnede mappe-statistikker ved hjælp af console.log(), inklusive samlet antal elementer, samlede filer, samlet størrelse og information om den største fil;

  • Linje 18-20: gennemløber arrayet fileList, som er gemt i directoryStats;

  • logger navn og størrelse på hver fil i mappen;

  • Linje 23: kalder funktionen main() for at starte analyseprocessen.

Fuld applikationskode

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();
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 10
some-alt