Ir para o conteúdo
xcubic

Ajuda pastas em c/c++

Mensagens Recomendadas

xcubic    1
xcubic

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Hipnoted    6
Hipnoted

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
xcubic    1
xcubic

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\ ...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
xcubic    1
xcubic

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HecKel    52
HecKel

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HecKel    52
HecKel

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
shumy    17
shumy

.\ 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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
xcubic    1
xcubic

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...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
xcubic    1
xcubic

#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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
shumy    17
shumy

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
xcubic    1
xcubic

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... :(

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
shumy    17
shumy

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
rgcaldas    0
rgcaldas

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
xcubic    1
xcubic

#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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
shumy    17
shumy

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HecKel    52
HecKel

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

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade