Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

quitZAUMMM

[Resolvido] [Tutorial] Calculando o tamanho de um arquivo em C

Recommended Posts

Introdução

 

O C ANSI não possui uma função para calcular o tamanho de um arquivo, entretanto com combinando duas funções da biblioteca padrão de C podemos fazer isto facilmente, estas funções são:

  • fseek - movimenta a posição corrente de escrita ou leitura no arquivo para um local específico
  • ftell - retorna a posição corrente de leitura ou escrita no arquivo (em bytes)

A idéia

 

A idéia é simples, primeiro movimentamos a posição corrente de escrita ou leitura no arquivo para o seu fim, com a função fseek em seguida, chamamos a função ftell para sabermos qual é posição atual de leitura ou escrita no arquivo, neste ponto a função ftell irá retornar quantos bytes o arquivo possui.

Exemplo

 

Vejamos um exemplo de um programa em que o usuário entra com o nome do arquivo e o programa informa o tamanho do arquivo:

#include <stdio.h>

int main() {

	char nomeArquivo[100]; // guarda o nome do arquivo
	FILE *arquivo; // ponteiro para o arquivo
	long tamanho; // tamanho em bytes do arquivo

	printf("Digite o nome do arquivo: ");
	scanf("%s", nomeArquivo);

	// abre o arquivo para leitura
	arquivo = fopen(nomeArquivo, "r");

	// verifica se o arquivo foi aberto com sucesso
	if (arquivo != NULL) {

		// movimenta a posição corrente de leitura no arquivo para o seu fim
		fseek(arquivo, 0, SEEK_END);

		// pega a posição corrente de leitura no arquivo
		tamanho = ftell(arquivo);

		// imprime o tamanho do arquivo
		printf("O arquivo %s possui %ld bytes",
			nomeArquivo, tamanho);

	} else {
		printf("Arquivo inexistente");
	}

	return 0;

}

Criando uma função que calcular o tamanho de um arquivo

 

Como a função fseek altera o estado do arquivo, para criarmos uma função que calcular o tamanho de um arquivo devemos guardar o estado do arquivo antes da função ser chamada para, depois poderemos recuperá-lo.

long calcularTamanhoArquivo(FILE *arquivo) {

	// guarda o estado ante de chamar a função fseek
	long posicaoAtual = ftell(arquivo);
	// guarda tamanho do arquivo
	long tamanho;

	// calcula o tamanho
	fseek(arquivo, 0, SEEK_END);
	tamanho = ftell(arquivo);

	// recupera o estado antigo do arquivo
	fseek(arquivo, posicaoAtual, SEEK_SET);

	return tamanho;
}

Dica retirada do site: Dicas e Truques de C / C++

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.