[fpc-pascal]Problems with FileIO

Eduardo Morras nec556 at ave128.retena.es
Wed Nov 6 18:20:34 CET 2002


Thanks for your reply, but the runtime error 100 still appear, and i don't 
get the hoped output filesize, it must be 4921 bytes (68*64+68*8+1*8+17*1) 
i get 4968 bytes (69*64+69*8); so the last blockwrite

blockwrite(FileOut,Entrada^,BytesLeidos*sizeof(byte));

writes the entire Entrada^ array (64 bytes) and not BytesLeidos bytes (17 
in this case)... so perhaps BlockRead doesn´t change the Result value... 
don´t know. More clues:?

Also, adding Result to BlockWrite makes no change, run error 100  is there.

I can make public all my code (near 170 lines) if needed.

TIA

>The blockread function has the declaration:
>
>Procedure Blockread (Var F : File; Var Buffer; Var Count : Longint [; var
>Result : Longint]);
>
>If the "Result" parameter is not specified, as is the case in your program,
>an error is generated when there are less than Count bytes available in the
>input file.
>
>With the "Result" parameter, no error is generated, and "Result" returns the
>number of bytes actually read from the file.
>
>Try to change your code to:
>
>       bla bla
>       var
>           BytesRead: Longint;
>       Repeat
>             BytesLeidos := 64;
>             blockread(FileIn,Entrada^,BytesLeidos, BytesRead);
>             if BytesRead > 0 then begin
>                   bla bla
>
> >          I'm new to fpc and i'm trying to port some mac pascal code to
> > win32 console. I have this code to read 64 bytes of data from a file, work
> > with them and save a double and 64 bytes of data. Of course if blockread
> > reads f.e. 32 bytes it saves the double and 32 bytes. But when i want to
> > check the output file size is different from the expected. So i have an
> > input file of 4369 bytes, with 68 blocks of 64 bytes plus a block of 17
> > bytes (4369-64*68), the output file size must be 68 * 8 + 68 * 64 + 1 * 8 +
> > 1 * 17 = 4921 bytes. But i get 4896, which are 25 bytes less (25 bytes =
> > 8(from double)+17(the last block size)). So, the program don't treat the
> > last data block. The debugger says error 100 (FileIO problem), but what can
> > i do make it work for?

#The Unix Guru's View of Sex unzip ; strip ; touch ; grep ; finger ; mount 
; fsck ; more ; yes ; umount ; sleep





More information about the fpc-pascal mailing list