Jump to content
Jimbrix12345

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

Recommended Posts

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

Share this post


Link to post
Share on other 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".

  • Vote 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!

Share this post


Link to post
Share on other sites
Jimbrix12345

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

Edited by Jimbrix12345

Share this post


Link to post
Share on other 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" */
           }
       }
   }
}

Edited by 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!

Share this post


Link to post
Share on other 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?

Edited by Jimbrix12345

Share this post


Link to post
Share on other 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%.

Share this post


Link to post
Share on other 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'"

Edited by 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!

Share this post


Link to post
Share on other 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

Edited by Jimbrix12345

Share this post


Link to post
Share on other 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%.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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%.

Share this post


Link to post
Share on other 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).

Share this post


Link to post
Share on other sites
Jimbrix12345

Certo certo, erro meu.

Estava-me só a referir ao Windows.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.