FILE kopieren



  • Ich verstehe nicht, warum der Inhalt der Source-Datei nicht in die Destination-Datei geschrieben wird.

    Die Ziel-Datei wird zwar erstellt, aber halt leer

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

    int kopiere(char *src, char *dest)
    {
      FILE *quelle;
      FILE *ziel;
      int rc=0;
      int c;
    
      quelle=fopen(src,"r");
      if(quelle)
        {
          ziel=fopen(dest,"a");
          if(ziel)
    	{
    	  while((c=fgetc(ziel))!=EOF)
    	    {
    	      if(fputc(c,ziel)==EOF);
    	      {
    		printf("Konnte nicht geschrieben werden\n");
    	      }
    	      rc=1;
    	    }
    	}
          else
    	{
    	  printf("FEHLER");
    	}
          	  fclose(quelle);
    	  fclose(ziel);
        }
      else
        {
          printf("\nSource '%s' kann nicht gelesen werden\n",src);
          rc=0;
        }    
      return rc;
    }
    
    main(int argc, char *argv[])
    {
      char *src;
      char *dest;
    
      if(argc!=2)
        {
          src=argv[1];
          dest=argv[2];
    
          if(kopiere(src,dest))
    	{
    	  printf("ERFOLGREICH\n");
    	}
          else
    	{
    	  printf("ERROR\n");
    	}
        }
      else
        {
          printf("UNGÜLTIGE ANZAHL AN PARAMETER\n");
          exit(-1);
        }
    }
    


  • Wie wärs mit fgetc(quelle) statt fgetc(ziel)



  • ach lol..ok danke 😃



  • Habe eine Frage zu diesem Block. Ich möchte über die Kommandozeile 2 Parameter Source und Destination übergeben..Nun ist das doch so, dass der Programmname auch gezählt wird..das heiß doch, dass argc=3 sein müsste oder nicht.
    Wenn ich das Problem so löse, steht argc bei 3

    if(argc!=3)
    {
       //FEHLER
       exit(-1);
    }
    

    Wenn ich das aber so löse, springe ich direkt in den else-Zweig. Deshalb muss ich argc auf 2 überprüfen. Warum wird der Programmname hier nicht mitgezählt, verstehe ich irgendwie nicht so ganz..

    if(argc!=3)
    {
       //Kopiere;
    }
    else
    {
       //FEHLER
    }
    


  • Das kann nicht sein.
    Wie du richtig erkannt hast, wird argv[0] bei argc mitgezählt, wahrscheinlich hast du deine beiden Parameter nicht korrekt angegeben.



  • in meinem ersten post überprüfe ich deswegen argc auf den wert 2..
    bei 3 wird in den else-Zweig gesprungen..

    /Edit:OK, war ein logikfehler..


Anmelden zum Antworten