home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* FILECOPY.PAS *)
- (* Routine zum schnellen Kopieren von Dateien *)
- (* (c) 1990 Thomas Wolf & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM CopyTest;
- {$M 16384,1024,655360}
- {$I-}
-
- USES Dos; { alternativ: TYPE PathStr = STRING[79]; }
-
- VAR
- MyIOResult : WORD; { enthält den IOResult-Fehlercode }
-
- PROCEDURE FileCopy(quelldatname, zieldatname : PathStr);
- { Kopiert die Datei "quelldatname" nach "zieldatname". }
- { ACHTUNG: Falls die Zieldatei bereits existiert, wird }
- { sie, sofern möglich, überschrieben. Ein Schreibschutz }
- { muß deshalb vor Aufruf von FileCopy implementiert }
- { werden. Ein Fehler innerhalb dieser Prozedur kann mit }
- { der globalen Variable MyIOResult abgefragt werden. }
- CONST
- MaxMemReservierung = 65521;
- { Mit einem GetMem() zu reservierender Speicherbereich }
- { ist 64KByte - $0F }
- VAR
- puffer : ^BYTE;
- quelldat,
- zieldat : FILE;
- speicherbel,
- anzgeschr,
- anzgel,
- abfangIOR : WORD;
- BEGIN
- MyIOResult := 0;
- IF MaxAvail = 0 THEN { Kein Heap verfügbar }
- Exit {FileCopy};
- IF MaxAvail > MaxMemReservierung THEN
- speicherbel := MaxMemReservierung
- ELSE
- speicherbel := MaxAvail;
- GetMem(puffer, speicherbel);
- Assign(quelldat, quelldatname);
- Assign(zieldat, zieldatname);
- Reset(quelldat, 1);
- MyIOResult := IOResult;
- IF MyIOResult = 0 THEN BEGIN
- Rewrite(zieldat, 1);
- MyIOResult := IOResult;
- IF MyIOResult = 0 THEN
- REPEAT
- BlockRead(quelldat, puffer^, speicherbel, anzgel);
- MyIOResult := IOResult;
- IF MyIOResult = 0 THEN BEGIN
- BlockWrite(zieldat, puffer^, anzgel, anzgeschr);
- MyIOResult := IOResult;
- END;
- UNTIL (MyIOResult <> 0) OR (anzgel = 0) OR
- (anzgel <> anzgeschr);
- END;
- Close(quelldat);
- abfangIOR := IOResult;
- Close(zieldat);
- abfangIOR := IOResult;
- FreeMem(puffer, speicherbel);
- END {FileCopy};
-
- BEGIN
- WriteLn('Kopiere die Datei TURBO.EXE nach TURBO.BAK');
- WriteLn; WriteLn;
- FileCopy('TURBO.PAS', 'TURBO.BAK');
- IF MyIOResult = 0 THEN
- WriteLn('Alles ok, Datei wurde fehlerfrei kopiert')
- ELSE BEGIN
- WriteLn('Ein Fehler ist aufgetreten: ', MyIOResult);
- WriteLn('(s. Turbo-Pascal-Handbuch: Fehlercodes)');
- END;
- WriteLn; WriteLn;
- Write('Bitte <RETURN> drücken...');
- ReadLn;
- END {CopyTest}.
- (* ------------------------------------------------------ *)
- (* Ende von FILECOPY.PAS *)
-