Hallo marabu,
Ich habe Deinen Code ergänzt:
Statt einer TList habe ich eine Listbox eingesetzt und einen Counter namens COUNT initalisiert der im Code mit dem Eintrag in die Listbox hochzählt.
Hier der geänderte Code:
Delphi-Quellcode:
function CacheSize(s: TStrings): Int64;
const
MAXINFOSIZE = 4
shl 10;
var
hCache: THandle;
dwSize: Cardinal;
i64: Int64;
pInfo: PInternetCacheEntryInfo;
begin
Result := 0;
//COUNTER
count:=0;
//
GetMem(pInfo, MAXINFOSIZE);
pInfo.dwStructSize := MAXINFOSIZE;
dwSize := MAXINFOSIZE;
hCache := FindFirstUrlCacheEntry(
nil, pInfo^, dwSize);
if hCache <> 0
then
begin
//s.Clear; Meine Listbox
form1.Listbox2.clear;
//
repeat
//s.Add(StrPas(pInfo.lpszSourceUrlName));
// Meine Listbox und COUNTER
form1.Listbox2.Items.Add(StrPas(pInfo.lpszSourceUrlName));
inc(count);
//
Int64Rec(i64).Hi := pInfo.dwSizeHigh;
Int64Rec(i64).Lo := pInfo.dwSizeLow;
Result := Result + i64;
dwSize := MAXINFOSIZE;
until not FindNextUrlCacheEntry(hCache, pInfo^, dwSize);
FindCloseUrlCache(hCache);
end;
FreeMem(pInfo, MAXINFOSIZE);
if hCache = 0
then
raise Exception.Create(SysErrorMessage(GetLastError));
end;
Mein Counter zeigt 1425 Einträge an, der Explorer 1362.
Deine Routine zeigt 8.206.222 Files an.
Wenn wir es nicht hinbekommen sollten, auch nicht so schlimm. Der Cache ist ein besonderer Bereich im Betriebssystem, der schon sehr fundierte Kenntnisse voraussetzt. Ich zeige zur Not meine Annäherung von 1.425 Einträgen an.