Ferramenta de Inspeção de Diretórios
Este capítulo apresenta um desafio: criar um aplicativo de console avançado chamado DirInspect Pro. Este aplicativo permitirá que você analise detalhadamente qualquer diretório e obtenha estatísticas relevantes sobre seus arquivos e subdiretórios.
🏆 Desafio à Frente
Imagine um cenário em que é necessário navegar por um labirinto de pastas contendo arquivos e dados essenciais. O DirInspect Pro é seu aliado nessa jornada, fornecendo informações abrangentes sobre a estrutura e o conteúdo do diretório.
🚀 O Aplicativo Resultante
Prepare-se para utilizar os recursos do DirInspect Pro. O aplicativo fornecerá informações essenciais, como
- O número total de itens;
- O tamanho agregado de todos os itens;
- O nome e o tamanho do maior arquivo;
- A lista detalhada dos nomes e tamanhos de cada arquivo individual.
Dois Caminhos para Escolher
Você tem dois caminhos à frente.
- O primeiro é enfrentar este desafio diretamente, aprimorando suas habilidades sem orientação;
- O segundo é seguir um guia útil que garante seu sucesso.
Independentemente do caminho escolhido, você terá uma jornada recompensadora que culmina na criação de um aplicativo de console envolvente e funcional.
Plano Mestre
- 👉 Passo 1: Importar os módulos necessários;
- 👉 Passo 2: Definir a função getStats;
- 👉 Passo 3: Definir a função analyzeFile;
- 👉 Passo 4: Definir a função analyzeDirectory;
- 👉 Passo 5: Definir e invocar a função main;
- 🎉 Conclusão;
- 🏁 Código completo do aplicativo.
Etapa 1: Importar Módulos Necessários
Para iniciar esta tarefa, é necessário utilizar as ferramentas corretas. Comece importando dois módulos principais: fs.promises para gerenciar o sistema de arquivos de forma assíncrona e path para manipular caminhos de arquivos de maneira eficiente.
const fs = require("fs").promises;
const path = require("path");
Etapa 2: Definir a Função getStats
A função assíncrona getStats recebe um caminho de arquivo ou diretório como argumento e tenta obter suas estatísticas utilizando fs.stat.
- Em caso de sucesso, retorna as estatísticas;
- Em caso de erro, registra uma mensagem de erro e retorna
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;
}
}
Etapa 3: Definir a Função analyzeFile
A função analyzeFile utiliza a função getStats para obter as estatísticas de um arquivo. Se as estatísticas estiverem disponíveis (diferente de null), retorna um objeto contendo o nome do arquivo (extraído com path.basename) e seu tamanho.
async function analyzeFile(filePath) {
const stats = await getStats(filePath);
if (!stats) return null;
return {
name: path.basename(filePath),
size: stats.size,
};
}
Etapa 4: Definir a função analyzeDirectory
A função analyzeDirectory recebe um caminho de diretório como argumento e analisa de forma abrangente seu conteúdo.
- Ela começa lendo os itens dentro do diretório usando
fs.readdire, em seguida, itera sobre cada item; - Para cada item, constrói o caminho completo usando
path.joine recupera suas estatísticas utilizando a funçãogetStats; - Se as
statsindicarem que o item é um arquivo, atualiza as estatísticas relacionadas a arquivos; - Se o item for um subdiretório, chama recursivamente a função
analyzeDirectorypara analisar seu conteúdo e, então, agrega as estatísticas.
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: [],
};
}
}
Etapa 5: Definir a função main e invocar
A função main é o ponto de entrada do script. Ela especifica o caminho do diretório a ser analisado (neste caso, ./docs), chama a função analyzeDirectory para obter as estatísticas do diretório e seu conteúdo, e então exibe as informações coletadas.
A função imprime
- O número total de itens;
- O número total de arquivos;
- O tamanho total;
- Os detalhes sobre o maior arquivo;
- A lista de arquivos no diretório.
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();
🎉 Conclusão: Habilidades Dominadas
Com o DirInspect Pro, você dominou a arte de analisar diretórios como um profissional. Este aplicativo de console demonstra sua capacidade de extrair estatísticas de arquivos, lidar com erros de forma eficiente e revelar insights relevantes sobre arquivos e subdiretórios dentro de um diretório especificado.
👨💻 Código Completo do Aplicativo
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();
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 2.56
Ferramenta de Inspeção de Diretórios
Deslize para mostrar o menu
Este capítulo apresenta um desafio: criar um aplicativo de console avançado chamado DirInspect Pro. Este aplicativo permitirá que você analise detalhadamente qualquer diretório e obtenha estatísticas relevantes sobre seus arquivos e subdiretórios.
🏆 Desafio à Frente
Imagine um cenário em que é necessário navegar por um labirinto de pastas contendo arquivos e dados essenciais. O DirInspect Pro é seu aliado nessa jornada, fornecendo informações abrangentes sobre a estrutura e o conteúdo do diretório.
🚀 O Aplicativo Resultante
Prepare-se para utilizar os recursos do DirInspect Pro. O aplicativo fornecerá informações essenciais, como
- O número total de itens;
- O tamanho agregado de todos os itens;
- O nome e o tamanho do maior arquivo;
- A lista detalhada dos nomes e tamanhos de cada arquivo individual.
Dois Caminhos para Escolher
Você tem dois caminhos à frente.
- O primeiro é enfrentar este desafio diretamente, aprimorando suas habilidades sem orientação;
- O segundo é seguir um guia útil que garante seu sucesso.
Independentemente do caminho escolhido, você terá uma jornada recompensadora que culmina na criação de um aplicativo de console envolvente e funcional.
Plano Mestre
- 👉 Passo 1: Importar os módulos necessários;
- 👉 Passo 2: Definir a função getStats;
- 👉 Passo 3: Definir a função analyzeFile;
- 👉 Passo 4: Definir a função analyzeDirectory;
- 👉 Passo 5: Definir e invocar a função main;
- 🎉 Conclusão;
- 🏁 Código completo do aplicativo.
Etapa 1: Importar Módulos Necessários
Para iniciar esta tarefa, é necessário utilizar as ferramentas corretas. Comece importando dois módulos principais: fs.promises para gerenciar o sistema de arquivos de forma assíncrona e path para manipular caminhos de arquivos de maneira eficiente.
const fs = require("fs").promises;
const path = require("path");
Etapa 2: Definir a Função getStats
A função assíncrona getStats recebe um caminho de arquivo ou diretório como argumento e tenta obter suas estatísticas utilizando fs.stat.
- Em caso de sucesso, retorna as estatísticas;
- Em caso de erro, registra uma mensagem de erro e retorna
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;
}
}
Etapa 3: Definir a Função analyzeFile
A função analyzeFile utiliza a função getStats para obter as estatísticas de um arquivo. Se as estatísticas estiverem disponíveis (diferente de null), retorna um objeto contendo o nome do arquivo (extraído com path.basename) e seu tamanho.
async function analyzeFile(filePath) {
const stats = await getStats(filePath);
if (!stats) return null;
return {
name: path.basename(filePath),
size: stats.size,
};
}
Etapa 4: Definir a função analyzeDirectory
A função analyzeDirectory recebe um caminho de diretório como argumento e analisa de forma abrangente seu conteúdo.
- Ela começa lendo os itens dentro do diretório usando
fs.readdire, em seguida, itera sobre cada item; - Para cada item, constrói o caminho completo usando
path.joine recupera suas estatísticas utilizando a funçãogetStats; - Se as
statsindicarem que o item é um arquivo, atualiza as estatísticas relacionadas a arquivos; - Se o item for um subdiretório, chama recursivamente a função
analyzeDirectorypara analisar seu conteúdo e, então, agrega as estatísticas.
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: [],
};
}
}
Etapa 5: Definir a função main e invocar
A função main é o ponto de entrada do script. Ela especifica o caminho do diretório a ser analisado (neste caso, ./docs), chama a função analyzeDirectory para obter as estatísticas do diretório e seu conteúdo, e então exibe as informações coletadas.
A função imprime
- O número total de itens;
- O número total de arquivos;
- O tamanho total;
- Os detalhes sobre o maior arquivo;
- A lista de arquivos no diretório.
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();
🎉 Conclusão: Habilidades Dominadas
Com o DirInspect Pro, você dominou a arte de analisar diretórios como um profissional. Este aplicativo de console demonstra sua capacidade de extrair estatísticas de arquivos, lidar com erros de forma eficiente e revelar insights relevantes sobre arquivos e subdiretórios dentro de um diretório especificado.
👨💻 Código Completo do Aplicativo
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();
Obrigado pelo seu feedback!