Autor Beitrag
Millo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 147



BeitragVerfasst: Mi 14.08.02 23:12 
Hallo

Ich habe merkwürdige Probleme mit den Temporary Internet Files wenn ich mir die Ordner Größe anzeigen lassen will gibt er mir einen viel zu kleinen Wert (bei anderen ordner den richtigen).
Und ich wollte fragen wie ich das Attribut des Ordners ändern kann (Schreibgeschützt).
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 15.08.02 08:18 
Das wird wahrscheinlich daran liegen, dass der Ordner nicht wirklich Dateien (im strengen Sinne des Wortes) enthält. Windows bietet zum Auslesen der Einträge eigene Funktionen an (PSDK, Stichwort: FindFirstURLCacheEntry).

Ich habe mal einen IE-CacheViewer geschrieben, der alles anzeigt, was er im Cache finden kann. Temporäre Dateien, Cookies usw. Bei Interesse poste ich gern die Leseroutine - der Rest ist ja dann nicht mehr schwer. :wink:
Millo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 147



BeitragVerfasst: Do 15.08.02 12:09 
Ah das ist interresant

Wäre nett wenn du mir die Lese routine geben könntest.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 15.08.02 14:05 
Gebraucht wird für das Beispiel eine TListView im Reportmodus mit 6 Spalten (URL, lokal, LastAccess, Expired, LastModified, Hitrate). Hier der Code zur Ansicht und evtl. Verbesserung:
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
uses
  WinInet;

// am besten als private Prozedur deklarieren
procedure TDeineForm.LoadURLCache(ClearIt:boolean=FALSE);
var
  bFool : boolean;
  res   : integer;
  ds    : PInternetCacheEntryInfo;
  lenDS : cardinal;
  li    : TListItem;
  sysT  : TSystemTime;
begin
  lv1.Items.Clear;    // TListview leeren,
  lv1.Items.BeginUpdate;  // & Bildschirmausgabe blockieren

  lenDS := sizeof(TInternetCacheEntryInfo);
  GetMem(ds,lenDS);
  try
    fillchar(ds^,lenDS,0);

    // den 1. Eintrag im Cache suchen
    res := 0; while(res = 0) do
                begin
                  res := FindFirstURLCacheEntry(nil,ds^,lenDS);
                  if(res = 0) then
                    case GetLastError of
                      ERROR_INSUFFICIENT_BUFFER:
                        begin
                          FreeMem(ds); GetMem(ds,lenDS); fillchar(ds^,lenDS,0);
                        end;
                      else
                        break;
                    end;
                end;

    bFool := true;

    // durch den Cache loopen
    if(res <> 0) then
      while(true) do
        begin
          if(bFool) then
            if(ClearIt) then DeleteURLCacheEntry(ds^.lpszSourceUrlName)
              else
                begin
                  // URL und lokalen Daeinamen anzeigen
                  li := lv1.Items.Add; li.Caption := ds^.lpszSourceUrlName;
                                       li.SubItems.Add(ds^.lpszLocalFileName);

                  // LastAccess, Expired, & LastModified anzeigen
                  if(FileTimeToSystemTime(ds^.LastAccessTime,sysT)) then
                    try
                      li.SubItems.Add(FormatDateTime('dd.mm.yyyy hh:nn',SystemTimeToDateTime(sysT)));
                    except
                      li.SubItems.Add('unbekannt');
                    end
                  else
                    li.SubItems.Add('unbekannt');
                  if(FileTimeToSystemTime(ds^.ExpireTime,sysT)) then
                    try
                      li.SubItems.Add(FormatDateTime('dd.mm.yyyy hh:nn',SystemTimeToDateTime(sysT)));
                    except
                      li.SubItems.Add('unbekannt');
                    end
                  else
                    li.SubItems.Add('unbekannt');
                  if(FileTimeToSystemTime(ds^.LastModifiedTime,sysT)) then
                    try
                      li.SubItems.Add(FormatDateTime('dd.mm.yyyy hh:nn',SystemTimeToDateTime(sysT)));
                    except
                      li.SubItems.Add('unbekannt');
                    end
                  else
                    li.SubItems.Add('unbekannt');

                  // Hitrate anzeigen
                  li.SubItems.Add(inttostr(ds^.dwHitRate));
                end;

          bFool := FindNextURLCacheEntry(res,ds^,lenDS);

          if(not(bFool)) then
            case GetLastError of
              ERROR_INSUFFICIENT_BUFFER:
                begin
                  FreeMem(ds); GetMem(ds,lenDS); fillchar(ds^,lenDS,0);
                end;
              else
                break;
            end;
        end;

    FindCloseURLCache(res);
  finally
    FreeMem(ds);
  end;

  lv1.Items.EndUpdate;  
end;

Ruft man die Funktion auf und setzt den Parameter "ClearIt" auf TRUE, löscht man den ganzen Cache, ansonsten werden die herausgezogenen Daten in der ListView angezeigt. Im Großen und ganzen sind das also die gecachten Dateien (HTMLs, Pics usw.), mit folgenden Sonderfällen:
ausblenden Quelltext
1:
2:
3:
Visited:???   = Verlauf
Cookie:???    = Cookie
frontpage:??? = Frontpage-Vorschau

Will man jetzt gezielt nur einen Eintrag aus dem Cache löschen, braucht man die Funktion DeleteURLCacheEntry, die auch schon in der Scanroutine oben verwendet wurde. Und der übergibt man den Namen der URL, nicht den Namen der lokalen Datei - auch wenn sich das vielleicht paradox anhört. Da diese URL als Caption eines ListView-Eintrags benutzt wird, sollte es aber keine Probleme verursachen.

Ich empfehle einen Blick ins MSDN/PSDK, falls es mit den Funktionen Schwierigkeiten gibt. Die Delphi-WinAPI-Hilfe dürfte sich zu diesem Thema wohl ausschweigen.
Millo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 147



BeitragVerfasst: Fr 16.08.02 01:51 
Titel: THX
Danke!

Klappt alles hervorragend!!! Hab allerdings ein haufen Sachen rausschmeisen müssen weil das zu viele Infos waren