Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Jimbrix12345

Dúvida: verificar se o ficheiro recebido está correcto

Mensagens Recomendadas

Jimbrix12345

Boas.

Como posso verificar se a extensão de um ficheiro recebido (por exemplo, pelo terminal) está correcto?

Por exemplo, só quero aceitar ficheiros .txt

Obrigado

Cumprimentos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Encontra a posição do '.' que separa a extensão. Para isso podes usar, por exemplo, strrchr().

Depois de saberes onde começa a extensão (caso exista!) compara-a com "txt". Não te esqueças de comparar também o caracter a seguir ao último 't', senão corres o risco de assumir que um ficheiro com nome "file.txt3" tem a extesão "txt".

  • Voto 1

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Jimbrix12345

Como comparo depois o caracter a seguir ao ultimo t? É suposto não ter mais nada a seguir ("/0"),

Editado por Jimbrix12345

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Se usares o strcmp() para a comparação, essa função já compara também o '\0'.

Precisas de te "procupar" se comparares caracter-a-caracter ...

if (extensao[0] == 't') {
   if (extensao[1] == 'x') {
       if (extensao[2] == 't') {
           /* extensao pode ser "txt2" */
           if (extensao[3] == '\0') {
               /* extensao é "txt" */
           }
       }
   }
}

Editado por pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Jimbrix12345

Acho que percebi, obrigado ;)

EDIT:

Fiz o código assim:

Escrevo o nome do ficheiro no terminal.


 char *aux;
 int teste;

 aux=strchr(argv[1],'.');

 if(aux!=NULL){
	  teste=strcmp(aux,".txt");
	  if (teste!=0){
		   printf("e diferente\n");
	  }else{
		   printf("e igual!\n");
	  }

 }else{
	  printf("nao existe extensao\n");
 }

Está correcto?

Editado por Jimbrix12345

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

Isso está correto, se o "." não pudesse estar no meio de do nome do ficheiro.

Um ficheiro com o nome:

abc.grr.txt

É um ficheiro com um nome válido.

O teu código tb recusa um ficheiro com o nome:

abc.txt.aa.txt

Mas, acho que ele tb seria válido.

Agora tens que avaliar se essa situação é um problema para o que estás a fazer ou não.

Se for um trabalho académico, não deve haver problema.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Para o problema levantado pelo brunoais deixar de ser problema, em vez de strchr() usa strrchr(). O primeiro encontra o primeiro caracter da string; o segundo encontra o ultimo

char fn[] = "abc.txt.aa.txt";
//              ^      ^ --- strrchr(fn, '.');
//              ^ ---------- strchr(fn, '.');

Nota: a mnemonica que eu uso para strrchr() é "strrchr() é o mesmo que strchr() em 'reverse'"

Editado por pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Jimbrix12345

Sim, brunoais já tinha reparado, mas acho que não tem muita lógica meter um ponto a meio de um ficheiro... :P

Obrigado a ambos, vou fazer o que o png disse.

EDIT: Está resolvido :D

Editado por Jimbrix12345

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

Sim, brunoais já tinha reparado, mas acho que não tem muita lógica meter um ponto a meio de um ficheiro... :P

O_O.

O que eu tenho feito ao longo de muitos anos é ilógico?!?!


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

O_O.

O que eu tenho feito ao longo de muitos anos é ilógico?!?!

tens de te lembrar que a microsoft implementou uma ideia muito vincada do uso das extensões dos ficheiro (isto porque é algo separado do nome destes)

quem nunca viu nada alem do ms-dos/windows não tem a noção real das coisas


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

tens de te lembrar que a microsoft implementou uma ideia muito vincada do uso das extensões dos ficheiro (isto porque é algo separado do nome destes)

quem nunca viu nada alem do ms-dos/windows não tem a noção real das coisas

E eu uso extensões nos ficheiros.

Só que uso coisas como:

file.php.bak.php


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

Em seguimento do que foi dito pelo HappyHippyHippo, aqui fica o nome de um ficheiro completamente normal no meu sistema: vmlinuz-3.2.0-40-generic-pae, que para muitas pessoas deve ser algo com a extensão ridícula .0-40-generic-pae LOL

@Jimbrix12345: é perfeitamente normal utilizar pontos no meio de um nome de ficheiro (e uma das utilizações mais comuns é, por exemplo, para mencionar um número de versão).

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.