ein Kapitel zurück                                           ein Kapitel weiter

Hier die Lösung der Aufgabe......

/*Download:backup.c*/
#include <stdio.h> #include <stdlib.h> #define BAK ".bak" char zielname[20]; void bak_name(char z[]) { char temp[5] = BAK; int i,j; for(i=0;z[i]!= '.'; i++) zielname[i]=z[i]; for(j=0; temp[j] != '\0'; j++,i++) zielname[i]=temp[j]; zielname[i]='\0'; } int main(int argc, char *argv[]) { FILE *quelle, *ziel; int c; quelle=fopen(argv[1],"rb"); if(quelle==NULL) { printf("Konnte %s nicht finden bzw. öffnen!\n",argv[1]); exit(0); } else { bak_name(argv[1]); printf("%s\n",zielname); ziel=fopen(zielname,"w+b"); if(ziel==NULL) { printf("Konnte Zieldatei nicht erzeugen!\n"); exit(0); } else { while((c=getc(quelle)) != EOF) putc(c,ziel); } } return 0; }

Das Programm rufen sie jetzt mit....

kopie helloworld.c

..auf. Jetzt schauen sie in dem Verzeichnis in dem sich die Datei helloworld.c befindet und siehe da, dort ist noch eine weitere Datei mit dem Namen...

helloworld.bak

Diese können sie wie jeder andere Lesbare Datei auch mit einem Editor ansehen bzw. bearbeiten.

Die einzige Schwierigkeit in diesem Programm war wahrscheinlich für sie das 1. Argument in der Kommandozeile die Endung *.bak zu geben. Natürlich könne sie die Funktion auch anders schreiben z.B. so...

void bak_name(char z[])
{
 int i=0,fertig=1;
 while(fertig)
 {
  if((strcmp(z[i],'.')) !=0)
       zielname[i]=z[i++];
  else
   {
    zielname[i]='\0';
    strcat(zielname,BAK);
    fertig=0;
   }
 }
}

...oder eine noch kürzere und einfachere Version der Funktion bak_name....

void bak_name(char z[])
{
 int i=strlen(z);
 strcpy(zielname,z);
 zielname[i-4]='\0';
 strcat(zielname,BAK);
}

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf