• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

xcubic

Ajuda pastas em c/c++

29 mensagens neste tópico

Boas,

Estou a desenvolver um pequeno programa em c e a uma certa altura preciso de abrir um .txt existente na mesma pasta do executável. Uma vez que o programa pode estar em qq parte do disco em qq pasta, o caminho para o ficheiro que preciso de abrir está sempre a mudar. Como faço para abrir o .txt independentemente da pasta?

Thanks

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes sempre ler o path do teu ficheiro de um ficheiro de configuração. Imagina, crias um ficheiro .txt em que na primeira linha tenha o caminha até ao fixheiro que vais abrir na aplicação.

No decorrer da aplicação lês esse ficheiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso não funciona. Pois preciso de um caminho para ler o ficheiro de configuração e assim que mudar esse caminho deixo de poder encontrar automaticamente esse ficheiro e isso é o que eu quero. Poder abrir um ficheiro na mesma pasta do programa que eles se encontrem em c:\ ou c:\xpto\ ...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

FILE *fp;

fp=fopen("ficheiro.txt","r");

Ele automaticamente procura o "ficheiro.txt" na mesma pasta do executável.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

FILE *fp;

fp=fopen("ficheiro.txt","r");

Ele automaticamente procura o "ficheiro.txt" na mesma pasta do executável.

.\file

Não sei porquê mas nada disso funcionou. o .\file vai dar erro pois a \ é um carácter muito importante no máximo podia ser esta /. Para o caso do "ficheiro.txt" também não. :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não é .\file, mas sim ./file, tal como tu mesmo disseste, o \ é um caracter muito importante em C, usado para flags e afins.

O . é uma directoria virtual, que corresponde à directoria actual, tal como o .. também é uma directoria virtual que corresponde à directoria imediatamente antes.

abraços, HecKel

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quem falou em DOS? Até programo mais em UNIX que em DOS.

É válido em C, garanto-te. Sempre usei isso assim.

abraços, HecKel

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Coloca aqui o código que estás a testar, sff. E o erro também.

abraços, HecKel

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

.\ ou ./ depende do sistema operativo.

O que pode acontecer é o caracter \ servir como escape, nesse caso penso que .\\ serve.

Mas escrevendo so o file como o Warrior disse devia funcionar.

. e .. servem para path relativos á pasta de origem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Simplificando:


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

int main()
{
      FILE *fp;

      fp = fopen("./deviants.txt", "r");
      if (fp==NULL)
        printf("Erro!\n\n");
      else
        printf("OK!\n\n");

        system("PAUSE");
      return 0;
}

O programa compila. Mas quando corrido não abre o ficheiro...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
   char path[1000],path2[1000];
   char *pathend;
   int i=1, j=0, l,m;

   pathend = argv[0];
   strcpy (path,pathend);
   l = strlen (path);

   for (i=l; i!=0; i-- ) {
      if (path[i]=='\\') {
         path[i]='/';
         if (j==0) {
            j=1;
            m=i;
         }
      }
   }

   for (i=0; i!=m+1; i++) {
   printf("%i/%i, ",i,m);
   path2[i]=path[i];
   }
   path2[i]='\0';

   // path2 é o caminho

   system("PAUSE");
   return 0;
}

Isto foi uma maneira que arranjei. Que tal?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso parece muita palha!

Só com o nome do ficheiro não abre?

Só vejo duas justificações.

Ou o ficheiro não existe onde estas a executar o exe, ou está locado para outro programa.

Já agora, estas a correr na linha de comandos, ou em algum IDE? É que a localização origem assumida pode ser diferente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenho a certeza que está tudo no sítio e sei que é muita palha, mas só assim funcionou e já acabei o programa que andava a fazer. ;) Eu uso o Dev-C++. Mas se algm tiver solução melhor diga... :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não é a questão do  IDE ser melhor ou não.

Alguns IDE's não consideram a pasta origem, onde está o exe, mas sim onde está o projecto, e que pode ser diferente.

Logo convem executar o programa da linha de comandos, ou fora do IDE.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas o meu ficheiro fonte encontra-se na mesma pasta do executável e do .txt

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E executas o ficheiro através do IDE? Ou pelo sistema operativo (tipo linha de comandos) ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se o ficheiro esta na mesma pasta até sem o ./ devia de funcionar

Verifica

nome do ficheiro com extensão, se estiveres em windows e guardares um ficheiro no notepad com teste.txt e fica teste.txt.txt e se as extensões conhecidas estiverem escondidas...

permissões de acesso ao ficheiro

se tudo isto estiver bem então há mais qualquer coisa que te falta mencionar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
FILE *file;
if (!(file = fopen("deviants.txt","r")))
{
printf("Failed open: deviants.txt\n");
system("PAUSE");
return -1;
}
system("PAUSE");
return 0;
}

Algo assim? Não funciona. E acho que está tudo dito. Uso Dev-C++. Fonte, executavel e txt na mesma pasta.

Devolve:

Failed open: deviants.txt

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, parece que sim.

Mas devia funcionar.

Só falta confirmar uma coisa.

Estas a usar windows? Tens as extensões escondidas para ficheiros conhecidos?

Não me ocorre mais nada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estas a usar windows? Tens as extensões escondidas para ficheiros conhecidos?

Isso não afecta na programação, é apenas ocultação visual e não física, logo o programa deveria funcional. O único problema que consigo apontar é para o IDE.

abraços, HecKel

0

Partilhar esta mensagem


Link 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