home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 08 / tricks / filecopy.pas < prev    next >
Pascal/Delphi Source File  |  1990-07-05  |  3KB  |  84 lines

  1. (* ------------------------------------------------------ *)
  2. (*                   FILECOPY.PAS                         *)
  3. (*      Routine zum schnellen Kopieren von Dateien        *)
  4. (*          (c) 1990  Thomas Wolf & TOOLBOX               *)
  5. (* ------------------------------------------------------ *)
  6. PROGRAM CopyTest;
  7. {$M 16384,1024,655360}
  8. {$I-}
  9.  
  10. USES Dos;         { alternativ: TYPE PathStr = STRING[79]; }
  11.  
  12. VAR
  13.   MyIOResult : WORD;     { enthält den IOResult-Fehlercode }
  14.  
  15.   PROCEDURE FileCopy(quelldatname, zieldatname : PathStr);
  16.   { Kopiert die Datei "quelldatname" nach "zieldatname".   }
  17.   { ACHTUNG: Falls die Zieldatei bereits existiert, wird   }
  18.   { sie, sofern möglich, überschrieben. Ein Schreibschutz  }
  19.   { muß deshalb vor Aufruf von FileCopy implementiert      }
  20.   { werden. Ein Fehler innerhalb dieser Prozedur kann mit  }
  21.   { der globalen Variable MyIOResult abgefragt werden.     }
  22.   CONST
  23.     MaxMemReservierung = 65521;
  24.     { Mit einem GetMem() zu reservierender Speicherbereich }
  25.     { ist 64KByte - $0F                                    }
  26.   VAR
  27.     puffer       : ^BYTE;
  28.     quelldat,
  29.     zieldat      : FILE;
  30.     speicherbel,
  31.     anzgeschr,
  32.     anzgel,
  33.     abfangIOR    : WORD;
  34.   BEGIN
  35.     MyIOResult := 0;
  36.     IF MaxAvail = 0 THEN             { Kein Heap verfügbar }
  37.       Exit {FileCopy};
  38.     IF MaxAvail > MaxMemReservierung THEN
  39.       speicherbel := MaxMemReservierung
  40.     ELSE
  41.       speicherbel := MaxAvail;
  42.     GetMem(puffer, speicherbel);
  43.     Assign(quelldat, quelldatname);
  44.     Assign(zieldat, zieldatname);
  45.     Reset(quelldat, 1);
  46.     MyIOResult := IOResult;
  47.     IF MyIOResult = 0 THEN BEGIN
  48.       Rewrite(zieldat, 1);
  49.       MyIOResult := IOResult;
  50.       IF MyIOResult = 0 THEN
  51.         REPEAT
  52.           BlockRead(quelldat, puffer^, speicherbel, anzgel);
  53.           MyIOResult := IOResult;
  54.           IF MyIOResult = 0 THEN BEGIN
  55.             BlockWrite(zieldat, puffer^, anzgel, anzgeschr);
  56.             MyIOResult := IOResult;
  57.           END;
  58.         UNTIL (MyIOResult <> 0) OR (anzgel = 0) OR
  59.               (anzgel <> anzgeschr);
  60.     END;
  61.     Close(quelldat);
  62.     abfangIOR := IOResult;
  63.     Close(zieldat);
  64.     abfangIOR := IOResult;
  65.     FreeMem(puffer, speicherbel);
  66.   END {FileCopy};
  67.  
  68. BEGIN
  69.   WriteLn('Kopiere die Datei TURBO.EXE nach TURBO.BAK');
  70.   WriteLn;  WriteLn;
  71.   FileCopy('TURBO.PAS', 'TURBO.BAK');
  72.   IF MyIOResult = 0 THEN
  73.     WriteLn('Alles ok, Datei wurde fehlerfrei kopiert')
  74.   ELSE BEGIN
  75.     WriteLn('Ein Fehler ist aufgetreten: ', MyIOResult);
  76.     WriteLn('(s. Turbo-Pascal-Handbuch: Fehlercodes)');
  77.   END;
  78.   WriteLn; WriteLn;
  79.   Write('Bitte <RETURN> drücken...');
  80.   ReadLn;
  81. END {CopyTest}.
  82. (* ------------------------------------------------------ *)
  83. (*                Ende von FILECOPY.PAS                   *)
  84.