Ir para conteúdo

POWERED BY:

Arquivado

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

Beraldo

[Resolvido] Detectar tipo de arquivo

Recommended Posts

Já faz uns dias que estou tentando descobrir se há como detectar o mime-type de um arquivo usando C. O máximo que encontrei foi uma função personalizada que retorna o mime-type conforme a extensão do arquivo,. Porém, não quero algo que relacione a extensão do arquivo com o mime-type, já que isso não seria muito fiel.

 

Minha intenção é saber se um determinado arquivo é binário ou não. Para o programa lê-lo adequadamente.

 

O que consegui fazer foi isto:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>




int main(int argc, char *argv[])
{
	FILE *fp;
	char c;
	
	if ((fp = fopen(argv[1], "r")) == NULL)
	{
		fprintf(stderr, "Erro ao abrir arquivo\n");
		exit(1);
	}
	
	if ( isalnum(c = fgetc(fp)) )
	{
		printf("é ASCII\n");
	}
	else
	{
		printf("Não é ASCII\n");
	}
	
	
	fclose(fp);

return 0;
}

Aparentemente funcionou. Mas parece um tanto "gambiárrico"

 

Há uma forma mais bonita de fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por 'binário' você quer dizer "executável" ou "só abre com um programa"? Um arquivo de registros, por exemplo, pode ser um binário mas não é executável.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você se refere ao file do Unix, né?

Mas como eu posso pegar o resultado de system(), já que essa função retorna um inteiro?

 

Talvez executando algo assim:

 

system("file -i arquivo > tmp");

verifica o valor de tmp usando ER

remove tmp

 

 

Não é difícil, mas há alguma forma mais simples?

Compartilhar este post


Link para o post
Compartilhar em outros sites

P/ quem não sacou ainda:

 

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
 char s[50];
 char *com = "file -bi vazio";
 FILE *B = popen(com,"r");

 fgets(s,50,B);
 (*strchr(s,(int)'\n')) = '\0';
 pclose(B);
 printf("==>%s\n",s);
 return 0;
}

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.