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

Joao Miguel

[Resolvido] open file

Mensagens Recomendadas

Joao Miguel

Boa noite. Para um projecto, tenho de numa primeira parte, abrir um ficheiro chama-se "Lista.txt" e dentro deste ficheiro, em cada linha, tem o nome de outros ficheiros que é necessário abrir para depois manipular o conteúdo deles. Contudo, não estou a conseguir abrir os ficheiros que estão na "Lista.txt".

Aqui vai o código que fiz:

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

#define MAX_BUF_SIZE 1024

int main() {
 FILE *f;
 FILE *new_f;
 char buf[MAX_BUF_SIZE];
 char new_buff[MAX_BUF_SIZE];

 f = fopen("Lista.txt", "r");

 while(fgets(buf, sizeof(buf), f))
 {
   printf("%s", buf);

   new_f = fopen(buf, "r");

   while(fgets(new_buff, sizeof(new_buff), new_f));
   {
     printf("%s", new_buff);
   }
 }

 return 0;
}

Não está a funcionar... qualquer tipo de ajuda ou outra forma de fazer é muito bem vinda.

Obrigado.

Editado por pmg
GeSHi, formatacao

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

A string lida contem o ENTER final. Esse ENTER não faz parte do nome do ficheiro.

Tira o ENTER do buf antes de proseguir

 while(fgets(buf, sizeof(buf), f))
 {
   buf[strlen(buf) - 1] = 0;
   printf("%s\n", buf);

   new_f = fopen(buf, "r");

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
Joao Miguel

Resultou, thanks. Mas agora o ciclo interior está a ler (fazer o printf) apenas do conteúdo da última linha dos ficheiros. Alguma ideia porquê?

Obrigado.

(código actualizado):

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

int main() {
   FILE *f;
   FILE *new_f;
   char buf[MAX_BUF_SIZE];
   char new_buff[MAX_BUF_SIZE];

   f = fopen("Lista.txt", "r");

   while(fgets(buf, sizeof(buf), f))
   {
       buf[strlen(buf) - 1] = 0;

       printf("%s \n", buf);

       new_f = fopen(buf, "r");

       while(fgets(new_buff, sizeof(new_buff), new_f));
       {
           new_buff[strlen(new_buff) - 1] = 0;

           printf("%s \n", new_buff);
       }
   }

   fclose(new_f);
   fclose(f);

   return 0;
}

Não estou a conseguir descobrir o problema...

Editado por pmg
GeSHi, formatacao

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

O teu segundo while não tem corpo :)

while (...) ;            // while sem corpo por causa do ponto e virgula
{                        // "corpo" desligado
 /* whatever */         // de qualquer estrutura
}                        // de controle

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
Joao Miguel

Oh my god, como é que fui meter um ; ali... se tive-se a compilar com warnings ja tinha visto isso à muito tempo...

Para quem vir este post, não se esqueçam de compilar de forma a obter o maior numero de warnings, poupa-vos muito tempo a descobrir onde estão os erros.

Muito obrigado.

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Oh my god, como é que fui meter um ; ali... se tive-se a compilar com warnings ja tinha visto isso à muito tempo...

Para quem vir este post, não se esqueçam de compilar de forma a obter o maior numero de warnings, poupa-vos muito tempo a descobrir onde estão os erros.

Muito obrigado.

não tinhas nenhum erro de sintaxe, não existiria nenhum warning para o que se sucedeu


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

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.