home *** CD-ROM | disk | FTP | other *** search
- PROGRAM FileCopyDemo; { FILECOPY.PAS }
-
- USES Crt;
-
- TYPE
- Action = (Input, Output);
- DataBlk = array[1..512] of byte;
- FileObj = OBJECT
- fp : FILE;
- CONSTRUCTOR OpenFile(FileName: string;
- FileAction: Action);
- PROCEDURE ReadBlock(VAR fb: DataBlk;
- VAR Size: integer);
- PROCEDURE WriteBlock(fb: DataBlk;
- size: integer);
- DESTRUCTOR CloseFile;
- END;
-
- CONSTRUCTOR FileObj.OpenFile;
- BEGIN
- Assign(fp, FileName);
- CASE FileAction of
- Input: BEGIN
- Reset(fp, 1);
- IF IOResult <> 0 THEN
- BEGIN
- WriteLn(FileName, ' not found!');
- Halt(1);
- END;
- WriteLn(FileName,' opened for read ... ');
- END;
- Output: BEGIN
- Rewrite(fp, 1);
- WriteLn(FileName,' opened for write ... ');
- END;
- END; {CASE}
- END;
-
- DESTRUCTOR FileObj.CloseFile;
- BEGIN
- Close(fp);
- WriteLn('File closed ...');
- END;
-
- PROCEDURE FileObj.ReadBlock;
- BEGIN
- BlockRead(fp, fb, SizeOf(fb), Size);
- WriteLn('Reading ', Size, ' bytes ... ');
- END;
-
- PROCEDURE FileObj.WriteBlock;
- BEGIN
- BlockWrite(fp, fb, Size);
- WriteLn('Writing ', Size, ' bytes ... ');
- END;
-
- VAR
- InFile, OutFile : FileObj;
- Data: DataBlk;
- Size: integer;
-
- BEGIN
- ClrScr;
- InFile.OpenFile('FILECOPY.PAS', Input);
- OutFile.OpenFile('FILECOPY.CPY', Output);
- REPEAT
- InFile.ReadBlock(Data, Size);
- OutFile.WriteBlock(Data, Size);
- UNTIL Size <> SizeOf(DataBlk);
- InFile.CloseFile;
- OutFile.CloseFile;
- Write('Press Enter to quit ... ');
- ReadLn;
- END.
-