Iemand enig idee hoe de Windows(7) file read cache te verhinderen voor 1 bepaalde file (of desnoods voor een hele drive)?
Alvast bedankt!
Iemand enig idee hoe de Windows(7) file read cache te verhinderen voor 1 bepaalde file (of desnoods voor een hele drive)?
Alvast bedankt!
Vriendelijke groeten,
Dany
Waarom ? Een write kan ik nog begrijpen maar om te lezen??
10.4.2, Delphi2010, of Lazarus 2.2.0
https://docs.microsoft.com/nl-nl/win...ushfilebuffers na iedere write?
Omdat de 'file' geen file is maar in realiteit een USB randapparaat (USB MSD device, gedraagt zich als een extra drive). Schrijven naar de file betekent data zenden naar het device, lezen uit de file betekent data ontvangen van het device. Uiteraard betekent het laatste dat er niet gelezen mag worden uit de Windows file cache... anders lees je terug wat je zelf net hebt gezonden. Eigenaardig genoeg heb ik geen problemen met de write cache...
Na enig opzoekwerk bleek het volgende te werken:
Merk ook op dat het schrijven en het lezen moet gebeuren op sectorgrenzen (dus mod 512 = 0), en dat het aantal gelezen of geschreven bytes ook gelijk moet zijn aan de sectorgrootte van de file (hier 512 bytes).Code:Handle := CreateFileA( PAnsiChar('G:\TEST.TXT'), // filename GENERIC_READ or GENERIC_WRITE, // desired access FILE_SHARE_WRITE, // sharemode nil, // security attributes OPEN_EXISTING, // creation disposition FILE_FLAG_NO_BUFFERING, // Flags and attributes <------- dit doet het 'm 0); // template file SetFilePointer(Handle, 0, 0, 0); // beginning of file WriteFile(Handle, WriteBuff, 512, BytesWritten, 0); // read buffer SetFilePointer(Handle, 0, 0, 0); // beginning of file ReadFile(Handle, ReadBuff, 512, BytesRead, 0); // read buffer CloseHandle(Handle);
Het werkt, maar traag! Gemiddeld 4 millisecs voor een lees of schrijfoperatie. Natuurlijk zit USB daar ook voor iets tussen.
Het voorbeeld hierboven leest/schrijft alleen sector 0 van de file.
Last edited by Dany; 24-Apr-19 at 21:45.
Vriendelijke groeten,
Dany
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks