Avatar billede fedtoere Praktikant
21. februar 2008 - 14:24 Der er 5 kommentarer og
1 løsning

problem med at åbne flere filer ved brug af main(argc, argv)

Jeg har siddet og rodet lidt med lidt konvertering af nogle txt filer. Jeg har lavet et program til at hente de data jeg ønsker at se nærmere på fra en input fil.
Det der undrer mig er at når jeg kører programmet ved at starte mit exe program op så virker det fint, tager jeg derimod og "smider" en txt fil ovenpå min exe program så får jeg ikke forventet output.
Det der sker er at der IKKE bliver skrevet til en fil som jeg åbner med
  if ((file_ptr = fopen (file_name, "w"))!=NULL)

Jeg forstår ikke hvad der går galt, er det min *argv[] og argc der driller mig ?
Det burde det ikke være da mit problem også opstår selvom jeg ikke benytter de parameter der kommer på argc og argv !!!?
Avatar billede oddi Nybegynder
22. februar 2008 - 01:22 #1
Kan du vise os noget mere kode?
Avatar billede fedtoere Praktikant
22. februar 2008 - 11:33 #2
// Ja, her er noget af min kode.
// ... = diverse kode


int main(int argc, char *argv[])
  {
  FILE *input_file_ptr;
  FILE *output_file_ptr;
  FILE *samlet_output_file_ptr;

  ...


  if (argc != 2)
      {
      cout << endl << endl << "File name to reduce  : ";
      cin >> input_file_name;
      }
  else
      {
      strcpy (input_file_name, argv[1]);
      }

  ...


  if ((input_file_ptr = fopen (input_file_name , "r" )) == NULL)
      {
      printf("**** ERROR - can't access input file ****");
      getch();
      abort();
      }
  else
      {
      if ((output_file_ptr = fopen( output_file_name, "w" )) == NULL)
        {
        printf( "**** ERROR - can't write output file ****" );
        getch();
        abort();
        }

      ...

      while (fgets (linetext, MAX_LINE_LENGTH, input_file_ptr) != NULL)
        {
        ...

        }
    } 


  if ((samlet_output_file_ptr = fopen( "Sam_log.txt", "a" )) == NULL)
    {
    printf( "**** ERROR - can't write output file ****" );
    getch();
    abort();
    }
  else
    {
    fprintf(samlet_output_file_ptr, "Test af skrift i fil");
    fclose(samlet_output_file_ptr);
    }

  }
Avatar billede fedtoere Praktikant
26. februar 2008 - 11:37 #3
Jeg har nu fundet frem til grunden til at min ene fil ikke åbnes til skrivning.
Problemet ser ud til at være mit streng navn der benyttes til filnavnet (tror jeg).
F.eks virker nedestående:

      strcpy (xx2_name, argv[1]);
      *strrchr(xx2_name, '.') = 0;
      strcat(xx2_name, "__xx2.txt");

Hvorimod dette IKKE virker, så noget er galt i min streng der bruges til filnavn.

      char samlet_string_navn[] = "samlet_log_data.txt";
      strncpy (xx3_name, samlet_string_navn, 19);
      xx3_name[19]= '\0';
      puts(xx3_name);

Hvad der er galt har jeg dog ikke fundet endnu.
Min tanke med ovenstående er at det er white-space karaktereren '\0' der driller mig.

Hjælp vil stadig være værdsat.
Avatar billede fedtoere Praktikant
26. februar 2008 - 12:17 #4
Jeg undrer mig...

Selvom jeg bruger
  #define SAMLET_FIL_NAVN "samlet_fil.txt"
og
  FILE *samlet_output_file_ptr;
  if (samlet_output_file_ptr = fopen (SAMLET_FIL_NAVN, "w"))
    {
      ...

Så virker det ikke, skifter jeg ovenstående ud med

      strcpy (xx2_name, argv[1]);
      *strrchr(xx2_name, '.') = 0;
      strcat(xx2_name, "__xx2.txt");

      if (samlet_output_file_ptr = fopen (xx3_name, "w"))
        {
        ...

Så virker alt fint!
Avatar billede fedtoere Praktikant
26. februar 2008 - 12:18 #5
Hvad gør jeg galt !?
Avatar billede fedtoere Praktikant
19. juni 2008 - 12:58 #6
Lukker spørgsmålet pga maglende svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester