Beste forumleden,
ik raak een beetje gefrustreerd van de volgende code:
Code:
{$I-}
iCnt := 0; // Integer
bOke := False; // Boolean
repeat
Application.ProcessMessages;
wIOResult := IOResult; // wIOResult: Word
if (not bOke) and (iCnt > 0) then
CloseFile(fp); // fp: File
ShowMessage(Format('1. wIOResult = %d', [wIOResult]));
AssignFile(fp, sFile); // String;
System.FileMode := 0;
wIOResult := IOResult;
ShowMessage(Format('2. wIOResult = %d', [wIOResult]));
// Open the file, recordsize = 1 byte
System.Reset(fp, 1);
wIOResult := IOResult;
ShowMessage(Format('3. wIOResult = %d', [wIOResult]));
bOke := (wIOResult = 0);
if (bOke) then
Break;
Inc(iCnt);
until (iCnt = 3);
{$I+}
if (not bOke) or (iCnt = 3) then begin
ShowMessage('Oeps, 4 x geprobeerd......');
end;
Als ik aan de variable sFile een (windows-s) bestandsnaam toeken en het programma draait gaat het goed. Ken ik daarna een andere bestandsnaam toe, gaat het goed. Ken ik daarna weer de eerste bestandsnaam toe (een rawimage in het NEF formaat), dan krijg ik IOError nummer 5. Access-denied. Zeer vreemd want dat NEF bestand wordt door geen ander proces vast gehouden. De fout treedt op NA System.Reset(fp,1). IOResult is dan 5.
Voor zover ik weet kun je een file maar in 3 modi openen (0: Readonly, 1: writeonly en 2: readwrite).
Mijn programma is de voortzetting van een oud programma en alles vervangen door TFileStream lukt nu even niet.
Mijn vraag is: is er een mogelijkheid om er zeker van te zijn dat de variable fp (FILE) gesloten is voordat ik hem gebruik? (If Unassigned(fp) then... helpt niet.
Ik weet het even niet meer. Is er iemand bekend met het openen/lezen van binaire files in Lazarus?
Windows 10/x64
Lazerus 2.0.12
FPC: 3.2.0
8 GB ram, intel I5 2.3 Ghz.
Groetjes
Tinus
Bookmarks