Hi,
Ik heb een service-applicatie die om de zoveel tijd een csv-bestand moet inlezen. Het bestand wordt ieder heel uur overschreven door een externe partij en middels een share kan de service-applicatie het bestand benaderen. Het inlezen van die csv gebeurd in 1 seconde, maar de service-applicatie dient het inlezen van het bestand uit te stellen op het moment dat het bestand aangemaakt wordt. Dat aanmaken duurt zo'n 5 minuten.
Ik heb geen schrijfrechten op die share, dus ik kan het bestand alleen in read-mode openen bijv. met
Code:
function MyFileSize(AFileName: string): integer;
var
hFile: THandle;
hSize: DWORD;
begin
Result := 0;
hFile := CreateFile( PChar(AFilename)
, GENERIC_READ
, FILE_SHARE_READ
, nil
, OPEN_EXISTING
, FILE_ATTRIBUTE_NORMAL
, 0 );
if hFile <> INVALID_HANDLE_VALUE then
Result := GetFileSize(hFile, @hSize);
end;
Wanneer de task in de service-applicatie uitgevoerd moet worden, controleer ik op de grootte van het csv-bestand en een minuut later weer. Als de grootte onveranderd is, dan ga ik er vanuit dat er niet geschreven wordt en de applicatie het bestand kan inlezen.
Echter, als ik de grootte opvraag, krijg ik ook tijdens het aanmaken van het bestand als result de originele grootte, terwijl ik m.b.v. de verkenner zie dat de grootte vanaf 0 oploopt tot de oorspronkelijke grootte. Met welke functie kan ik de daadwerkelijke grootte achterhalen zoals de verkenner dat doet ? Of hoe zou ik dit anders op kunnen lossen ?
Bookmarks