[Back to COPYMOVE SWAG index] [Back to Main SWAG index] [Original]
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.
[Back to COPYMOVE SWAG index] [Back to Main SWAG index] [Original]