AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Temporary Internet Files: Größe u. Anzahl Files herausfinden
Thema durchsuchen
Ansicht
Themen-Optionen

Temporary Internet Files: Größe u. Anzahl Files herausfinden

Ein Thema von Go2EITS · begonnen am 12. Aug 2006 · letzter Beitrag vom 12. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Go2EITS

Registriert seit: 25. Jun 2006
519 Beiträge
 
Delphi 7 Personal
 
#1

Temporary Internet Files: Größe u. Anzahl Files herausfinden

  Alt 12. Aug 2006, 11:07
Hallo DP!

Tja, ne harte Nuss habe ich hier.
Ich bin gerade an der Revision meines Programmes, dass die temporären Verzeichnisse z. B. WinTemp, Usetemp etc. löschen soll. das Klappt prima. Aber Luckie will die Dateien vor dem Löschen sehen. Und ich auch.

Das Problem:
Das Verzeichnis
C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Temporary Internet Files
lässt sich im Explorer prima anzeigen. Aber alle "Countfiles" und das Holen der Größe des Verzeichnisses in MB schlugen fehl. Ich habe die Sourcen aus der DP bemüht. Klappt bei allen Verzeichnissen, nur nicht bei diesem, speziellen Systemordner.


TUNEUP kann die Files übrigens auch nicht holen und im Detail anzeigen.
Aber da fällt mir was ein, wie es wohl TUNEUP macht, da die Anzahl der Files und die Verzeichnisgröße zu sehen ist: Größe und die Anzahl der Files der gesamten Platte minus aller Files selbst gezählten Files auf der Platte müßte die Anzahl der Files und Größe des IETempVerzeichnisses ergeben.

Etwas umständlich, wenn es überhaupt geht..Vielleicht hat ja jemand einen funktionierenden Code?
Löschen kann ich das Verzeichnis mit einem Torrycode.

Beste Grüße
Go2EITS
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Temporary Internet Files: Größe u. Anzahl Files herausfi

  Alt 12. Aug 2006, 16:24
Hallo Go2EITS,

mit diesem Code und einem Blick in die API Dokumentation solltest du ein Stück weiter kommen:

Delphi-Quellcode:
uses
  WinInet;

function CacheSize(s: TStrings): Int64;
const
  MAXINFOSIZE = 4 shl 10;
var
  hCache: THandle;
  dwSize: Cardinal;
  i64: Int64;
  pInfo: PInternetCacheEntryInfo;
begin
  Result := 0;
  GetMem(pInfo, MAXINFOSIZE);
  pInfo.dwStructSize := MAXINFOSIZE;
  dwSize := MAXINFOSIZE;
  hCache := FindFirstUrlCacheEntry(nil, pInfo^, dwSize);
  if hCache <> 0 then
  begin
    s.Clear;
    repeat
      s.Add(StrPas(pInfo.lpszSourceUrlName));
      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;
Ich habe die byte size berechnet, bei nicht komprimierten Ordnern interessiert vielleicht eher die cluster size.

Grüße vom marabu

1. Hatte FreeMem() vergessen ...
2. Jeder Entry kann eine andere Size haben ...
  Mit Zitat antworten Zitat
Go2EITS

Registriert seit: 25. Jun 2006
519 Beiträge
 
Delphi 7 Personal
 
#3

Re: Temporary Internet Files: Größe u. Anzahl Files herausfi

  Alt 12. Aug 2006, 16:51
Hallo marabu,

vielen Dank für Deine Antwort.
Ich habe sofort den Code eingefügt und mir die Anzahl zeigen lassen: 505 Files. Der Explorer sagt mir aber 1.228 Files. Magst Du Deine Anzahl der Files unter dem Verzeichnis
C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Temporary Internet Files
bei Gelegenheit überprüfen? Ich agiere unter Windows2000 als ADMIN.

Was in den TStrings drin ist, will ich mir gerade in einer Listbox ansehen.

Beste Grüße!
Go2EITS

//Nachtrag: Da scheint es eine Lösung zu geben.
Lösung?
Da komme ich aber mit der Umsetzung leider nicht klar.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Temporary Internet Files: Größe u. Anzahl Files herausfi

  Alt 12. Aug 2006, 17:13
Sorry,

die Diskrepanz bei der Anzahl resultierte aus meiner Annahme, dass jede info im cache die gleiche size hat - das ist nicht so und ich habe meinen Code entsprechend angepasst.

marabu
  Mit Zitat antworten Zitat
Go2EITS

Registriert seit: 25. Jun 2006
519 Beiträge
 
Delphi 7 Personal
 
#5

Re: Temporary Internet Files: Größe u. Anzahl Files herausfi

  Alt 12. Aug 2006, 17:29
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.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Temporary Internet Files: Größe u. Anzahl Files herausfi

  Alt 12. Aug 2006, 17:36
Dass die Zahl jetzt zu hoch ist liegt daran, dass du im Explorer nicht alle Einträge siehst. Vermutlich musst du den einen oder anderen CacheEntryType auslassen, damit die Zahlen übereinstimmen.

marabu
  Mit Zitat antworten Zitat
Go2EITS

Registriert seit: 25. Jun 2006
519 Beiträge
 
Delphi 7 Personal
 
#7

Re: Temporary Internet Files: Größe u. Anzahl Files herausfi

  Alt 12. Aug 2006, 17:51
Es sind immerhin 102 MB Daten im Cache. Ob es 8 MIO Eintäge sind? Ich glaube nicht ganz,
da ich meine, dass bei Zugriff auf Verzeichnissen mit über 40.000 Einträgen Windows sehr langsam wird...
Zum Nachzählen werde ich wohl bei 8 Mio. Einträgen nicht kommen.
Ich werde über Shellexceute und Explorer das Cache-Verzeichnis anzeigen und zeige nach dem Löschen des an, wieviele Dateien gelöscht wurden und wie groß die Größendifferenz ist. Damit hätte ich dann konkrete Werte auf "LOWLEVEL-Niveau".

Vielen Dank nochmals, dass Du Dich meines schwierigen Themas angenommen hat.
Einen schönen Abend marabu!

Ich habe einen Dirmon gefunden inkl. Source, der mir die Änderungen anzeigt. Da sehe ich mal rein,
ob ich Routinen zweckentfremden kann.

Go2EITS
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Temporary Internet Files: Größe u. Anzahl Files herausfi

  Alt 12. Aug 2006, 18:00
Deine 8 Mio Einträge sind schon etwas seltsam, bei mir ist das Verhältnis 328 zu 304 - ein durchaus plausibler Unterschied. Wozu hast du die globale Variable "count" eineführt, wenn die ListBox.Count doch die Anzahl liefert?

marabu
  Mit Zitat antworten Zitat
Go2EITS

Registriert seit: 25. Jun 2006
519 Beiträge
 
Delphi 7 Personal
 
#9

Re: Temporary Internet Files: Größe u. Anzahl Files herausfi

  Alt 12. Aug 2006, 18:12
Count? ...aus Unwissenheit.
Die Diskrepanz ist so groß bei Dir und mir, in Prozent gesehen, wohl aus Surfverhalten resultierend, nicht.
// nachtrag: Beim IECACHE löschen (Code von Torry) habe ich den Code geändert. Er zählt die gelöschen Einträge. Ich komme auf 1425. Ich prüfe mal die Daten, wenn ich weniger Files im Cache habe.

Go2EITS
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Temporary Internet Files: Größe u. Anzahl Files herausfi

  Alt 12. Aug 2006, 19:48
Um die unterschiedlichen CacheEntryTypes zu zählen kannst du diesen leicht modifizierten Code verwenden:

Delphi-Quellcode:
function CacheSizeEx(s, sCount: TStrings): Int64;
const
  MAXINFOSIZE = 4 shl 10;
var
  hCache: THandle;
  dwSize: Cardinal;
  i64: Int64;
  pInfo: PInternetCacheEntryInfo;
  cet: String;
  index: Integer;
begin
  Result := 0;
  GetMem(pInfo, MAXINFOSIZE);
  pInfo.dwStructSize := MAXINFOSIZE;
  dwSize := MAXINFOSIZE;
  hCache := FindFirstUrlCacheEntry(nil, pInfo^, dwSize);
  if hCache <> 0 then
  begin
    s.Clear;
    repeat
      cet := IntToHex(pInfo.CacheEntryType, 8);
      index := sCount.IndexOfName(cet);
      if index < 0
        then sCount.Values[cet] := '1'
        else sCount.ValueFromIndex[index] := IntToStr(Succ(StrToInt(sCount.ValueFromIndex[index])));
      s.Add(StrPas(pInfo.lpszSourceUrlName));
      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;
Form1.ListBox2 hat übrigens nichts in der Routine verloren - du übergibst deine Items als Argument an die Funktion:

Delphi-Quellcode:
procedure TForm1.DemoButtonClick(Sender: TObject);
begin
  SizeLabel.Caption := Format('%.n', [1.0 * CacheSize(ListBox2.Items)]);
end;
Viel Spaß noch mit deinem Projekt.

marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz