008
05.11.2002, 02:40 Uhr
Hans
Library Walker (Operator)
|
Hallo Ludwig,
hier mal ein kurzes Programm, das einen Datenblock aus einer Datei heraus kopiert, und in eine andere schreibt.
C++: |
/* Datei: be.c (Block Extracter) Programm zum extrahieren eines Datenblocks aus einer Datei. * Es liest die Eingabedatei Byteweise, und zählt dabei mit. * Wenn die Anfangsadresse des zu extrahierenden Blocks erreicht wurde, beginnt es, diesen in die Ausgabedatei zu kopieren. * Der Kopiervorgang ist zu Ende, wenn die Endadresse erreicht wurde; dann werden beide Dateien geschlossen.
Version 0.1 by HGP */
#include <stdio.h> #include <stdlib.h>
int main(int argc, char *argv[]) { FILE *in, *out;
int l, blockanf, blockend; char ch, *chptr;
/* Kommandozeile überprüfen. Dort müssen 4 Argumente angegeben sein. Wenn es mehr oder weniger sind, wird ein kurzer Bedinhinweis ausgegeben, und das Programm beendet. (Warum auf argc!=5 getestet wird, bitte bei der Erklärung der main()-Funktion nachsehen. */ if (argc!=5) { printf ("\nAufruf: be <Eingabedatei> <Ausgabedatei> "); printf ("<Startadresse> <Endadresse>\n"); exit (1); }
/* Die angegebenen Dateien öffnen */ if ((in=fopen(argv[1], "rb")) == NULL) { fprintf(stderr, "Can't open input file: %s\n", argv[1]); exit(1); }
if ((out=fopen(argv[2], "wb")) == NULL) { fprintf(stderr, "Can't open output file: %s\n", argv[2]); exit(1); }
/* Variablen initialisieren */ blockanf = atol(argv[3]); // Anfangsadresse des Blocks blockend = atol(argv[4]); // Endadresse des Blocks l=0; chptr=&ch; /* Weil fread, bzw. fwrite einen Zeiger erwarten, wird hier ein Zeiger auf den char zugewiesen. */
/* Überlese den Inhalt der Datei, bis der zu kopierende Block erreicht ist */ while (l < blockanf) { fread(chptr, 1, 1, in); // Ein Byte aus der Eingabedatei lesen l++; // und Zähler erhöhen } /* while-Schleife */
/* An dieser Stelle ist l==blockanf, d.h. so gross wie die Startadresse. Deshalb wird ab jetzt kopiert, bis l den Wert von blockend erreicht hat. */ while (l <= blockend) { fread(chptr, 1, 1, in); // Ein Byte aus der Eingabedatei lesen, fwrite(chptr, 1, 1, out); // in Ausgabedatei schreiben l++; // und Zähler erhöhen } /* while-Schleife */
/* Wenn wir alle Bytes kopiert haben, müssen wir die Dateien wieder schliessen, und sind fertig. */ fclose (in); fclose (out);
return 0; } /* main */
|
Ich hoffe, es ist ausführlich genug kommentiert, und Du damit was anfangen kannst. Aber bitte beachten: Es ist keine Fensteranwendung, sondern ein Programm für die Komanndozeile, bzw. der DOS-Box. Da es keinerlei Win-API-aufrufe enthält, kann man es auch unter DOS, OS/2, Linux oder was weis ich ohne Probleme übersetzen und laufen lassen.
Hans -- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung. Dieser Post wurde am 05.11.2002 um 02:47 Uhr von Hans editiert. |