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

bookVærktøj til Inspektion af Mapper

Dette kapitel præsenterer en udfordring: at udvikle en avanceret konsolapplikation ved navn DirInspect Pro. Denne applikation giver mulighed for grundigt at analysere enhver mappe og opnå indsigtsfuld statistik om dens filer og undermapper.

🏆 Udfordringen venter

Forestil dig et scenarie, hvor du skal navigere gennem en labyrint af mapper med vigtige filer og data. DirInspect Pro er din hjælper på denne rejse og leverer omfattende indsigt i mappens struktur og indhold.

🚀 Den Færdige App

Gør dig klar til at udnytte DirInspect Pros funktioner. Appen vil give dig væsentlige oplysninger, 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 Imellem

Du har to veje foran dig.

  • Den første er at tage udfordringen op direkte og styrke 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 der dig en lærerig rejse, der kulminerer i oprettelsen af en spændende 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 kræves de rette værktøjer. Start med at importere to centrale 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: Definér getStats-funktion

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.

  • Ved succes returneres statistikken;
  • Ved 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: Definér analyzeFile-funktion

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 tager en sti til en mappe som argument og analyserer dens indhold grundigt.

  • Den starter med at læse elementerne i mappen ved hjælp af fs.readdir og gennemløber derefter hvert element;
  • For hvert element konstrueres den fulde sti med path.join og henter dets statistik ved hjælp af funktionen getStats;
  • Hvis stats angiver, at elementet er en fil, opdateres filrelateret statistik;
  • Hvis elementet er en undermappe, kaldes funktionen analyzeDirectory rekursivt for at analysere dens indhold, hvorefter 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: [],
    };
  }
}

Trin 5: Definer main-funktion og kald

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

🎉 Konklusion: Tilegnede færdigheder

Med DirInspect Pro har du mestret kunsten at analysere mapper som en professionel. Dette konsolprogram demonstrerer din evne til at udtrække filstatistik, håndtere fejl problemfrit og afdække meningsfuld indsigt om filer og undermapper i en angivet mappe.

👨‍💻 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) {
  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();

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

Suggested prompts:

Can you explain how the recursive analysis in analyzeDirectory works?

What happens if the specified directory does not exist?

How can I modify the app to analyze a different directory?

Awesome!

Completion rate improved to 2.56

bookVærktøj til Inspektion af Mapper

Stryg for at vise menuen

Dette kapitel præsenterer en udfordring: at udvikle en avanceret konsolapplikation ved navn DirInspect Pro. Denne applikation giver mulighed for grundigt at analysere enhver mappe og opnå indsigtsfuld statistik om dens filer og undermapper.

🏆 Udfordringen venter

Forestil dig et scenarie, hvor du skal navigere gennem en labyrint af mapper med vigtige filer og data. DirInspect Pro er din hjælper på denne rejse og leverer omfattende indsigt i mappens struktur og indhold.

🚀 Den Færdige App

Gør dig klar til at udnytte DirInspect Pros funktioner. Appen vil give dig væsentlige oplysninger, 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 Imellem

Du har to veje foran dig.

  • Den første er at tage udfordringen op direkte og styrke 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 der dig en lærerig rejse, der kulminerer i oprettelsen af en spændende 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 kræves de rette værktøjer. Start med at importere to centrale 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: Definér getStats-funktion

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.

  • Ved succes returneres statistikken;
  • Ved 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: Definér analyzeFile-funktion

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 tager en sti til en mappe som argument og analyserer dens indhold grundigt.

  • Den starter med at læse elementerne i mappen ved hjælp af fs.readdir og gennemløber derefter hvert element;
  • For hvert element konstrueres den fulde sti med path.join og henter dets statistik ved hjælp af funktionen getStats;
  • Hvis stats angiver, at elementet er en fil, opdateres filrelateret statistik;
  • Hvis elementet er en undermappe, kaldes funktionen analyzeDirectory rekursivt for at analysere dens indhold, hvorefter 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: [],
    };
  }
}

Trin 5: Definer main-funktion og kald

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

🎉 Konklusion: Tilegnede færdigheder

Med DirInspect Pro har du mestret kunsten at analysere mapper som en professionel. Dette konsolprogram demonstrerer din evne til at udtrække filstatistik, håndtere fejl problemfrit og afdække meningsfuld indsigt om filer og undermapper i en angivet mappe.

👨‍💻 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) {
  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();

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 10
some-alt