Entwickler-Ecke
Internet / Netzwerk - Eine Datei aus dem IE-Cache löschen
Jakane - Do 07.02.13 16:56
Titel: Eine Datei aus dem IE-Cache löschen
Hallo liebe Delphi-Helfer :)
ich habe diesen Code gefunden, der den gesamten IE-Cache löscht.
Irgendeiner hat gesagt das man den so umbauen kann, dass nur eine Datei gelöscht wird, nämlich die die ich suche.
Kann mir einer sagen wie das geht? ich versteh die Funktion nämlich leider nicht :(
Delphi-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:
| procedure TfmHaupt.Update1Click(Sender: TObject); var Datei, Ziel : String; begin Datei:= 'http://www.anonym.de/Onlinehilfe/Version.txt'; Ziel:= ExtractFilePath(ParamStr(0)) + 'Version.txt'; UrlDownloadToFile(nil, PChar(Datei), PChar(Ziel), 0, nil); FuP_S._IECache_Clear(Datei); end;
procedure TFuP_S._IECache_Clear(Datei : String = ''); var lpEntryInfo: PInternetCacheEntryInfo; hCacheDir: LongWord; dwEntrySize: LongWord; begin if Datei <> '' then begin
end else begin dwEntrySize:= 0; FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize); GetMem(lpEntryInfo, dwEntrySize); if dwEntrySize > 0 then lpEntryInfo^.dwStructSize:= dwEntrySize; hCacheDir:= FindFirstUrlCacheEntry(nil, lpEntryInfo^, dwEntrySize); if hCacheDir <> 0 then begin repeat DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName); FreeMem(lpEntryInfo, dwEntrySize); dwEntrySize := 0; FindNextUrlCacheEntry(hCacheDir, TInternetCacheEntryInfo(nil^), dwEntrySize); GetMem(lpEntryInfo, dwEntrySize); if dwEntrySize > 0 then lpEntryInfo^.dwStructSize := dwEntrySize; until not FindNextUrlCacheEntry(hCacheDir, lpEntryInfo^, dwEntrySize); end; FreeMem(lpEntryInfo, dwEntrySize); FindCloseUrlCache(hCacheDir); end; end; |
Danke für Hilfen :)
Moderiert von Martok: Code- durch Delphi-Tags ersetzt
Jakane - Fr 08.02.13 12:32
Tut mir leid :( ich versteh beide Hinweise nicht.
Das eine gibt mir, soweit ich das verstehe, eine Info zurück und das andere ist C++ und hat auch nix mit meiner Funktion zu tun :(
thepaine91 - Fr 08.02.13 12:44
Man merkt das du es nicht verstehst. C++ C# usw.. ist unerheblich die API ist die selbe.
Noch ein kleiner Hinweis:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| HANDLE FindFirstUrlCacheEntry( LPCTSTR lpszUrlSearchPattern, LPINTERNET_CACHE_ENTRY_INFO lpFirstCacheEntryInfo, LPDWORD lpdwFirstCacheEntryInfoBufferSize );
BOOL GetUrlCacheEntryInfo( LPCTSTR lpszUrlName, LPINTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo, LPDWORD lpdwCacheEntryInfoBufferSize ); |
Jetzt vergleich mal beides miteinander und dann lese dir nochmal die verlinkte Doku durch. Anschließend solltest du den Unterschied und die Gemeinsamkeit sehen.
WasWeißDennIch - Fr 08.02.13 12:48
Und wenn man C++ nicht (auch nicht nur lesend) versteht, kann man immer noch einen Blick in die WinInet.pas werfen, sofern man eine Delphi-Version mit Source besitzt. Da sind die Strukturen dann nach Pascal übersetzt, der Link war eigentlich nur dazu gedacht, die Bedeutung der einzelnen Felder erklären zu lassen.
Jakane - Fr 08.02.13 13:54
So komm ich keinen Meter weiter :(
API.pas und Co kann ich nicht lesen, das ist für mich nur zusammengewürfelte Zahlen, Zeichen und Buchstaben wo ab und an mal ein bekannter Begriff wie "function" oder "Result" auftraucht
thepaine91 hat folgendes geschrieben : |
C#-Quelltext 1: 2: 3: 4: 5:
| HANDLE FindFirstUrlCacheEntry(LPCTSTR lpszUrlSearchPattern, LPINTERNET_CACHE_ENTRY_INFO lpFirstCacheEntryInfo, LPDWORD lpdwFirstCacheEntryInfoBufferSize);
BOOL GetUrlCacheEntryInfo(LPCTSTR lpszUrlName, LPINTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo, LPDWORD lpdwCacheEntryInfoBufferSize); |
|
Rein vom Verstehen, sehen beide Funktionen für mich gleich aus, anhand der Bezichnung der Variablen vermute ich, dass das eine eine Info ausgibt und das andere die erste Datei im Irgendwo sucht.
Wie man das benutzt, erklärt mir das aber nicht, geschweige wie ich die Funktion nun ändern muss, damit die Datei aus dem Cache rausfliegt.
Könnte man das Rätzelraten damit beenden? Ohne das Löschen der Datei kann ich meine Exe nicht aktualisieren. :(
WasWeißDennIch - Fr 08.02.13 14:53
Und nun? Sollen wir Dir C&P-Code schreiben? Im MSDN steht doch genau beschrieben, was die Funktionen tun und was die einzelnen Parameter bedeuten. Die passenden Dateitypen für Delphi sollte Dir zumindest die Codevervollständigung verraten, wenn Dir die C++-Typen nicht geläufig sind. Ein wenig mehr Eigeninitiative gehört zum Programmieren schon dazu, sry.
Jakane - Fr 08.02.13 15:27
Ich sitzt jetzt insgesagt seit fast 6 Stunden an dem Problem.
Eigeninitiative hat nichts damit zu tun, dass ihr (Wobei nur "WasWeißDennIch") versucht einen Anfänger etwas beizubringen was für zumindest Fortgeschrittene da ist.
Foren, Codes, Tutorials haben mir nicht geholfen.
Ausprobieren hat nicht geholfen.
Selbst die Programmierer in der Firma wissen nicht weiter.
Und nun scheitets auch an Delphi-Helfern
Die Codevervollständigung hilft mir nicht weil mein Delphi bei der Funktion "GetUrlCacheEntryInfo(PChar(Datei), URLHISTORY_CACHE_ENTRY, 0);" einen Fehler auswirft:
[Fehler] xxx.pas(1572): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
oder
[Fehler] xxx.pas(1572): Konstantenausdruck verletzt untere Grenzen
Solche Fehler bekommt man bei String oder Integer nicht -.-
Und selbst wenn ich an der Hürde irgendwann vorbei kommen sollte, glaube ich nicht nicht dass ein Austausch zwischen
"FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize);"
und
"GetUrlCacheEntryInfo(PChar(Datei), ???, dwEntrySize);"
ausreicht damit meine Funktion dann funktioniert
Auch wenn es egoistisch klingen mag.
Ich brauch den Code oder eine richtige Führung.
WasWeißDennIch - Fr 08.02.13 15:51
Kleine Änderung:
Delphi-Quelltext
1: 2: 3: 4:
| repeat ShowMessage(Format('URL: %s%sLocalFilename: %s', [lpEntryInfo^.lpszSourceUrlName, sLineBreak, lpEntryInfo^.lpszLocalFileName])); |
Jetzt könnte man diese Infos auswerten und nur, wenn sie den vorgegebenen Kriterien entsprechen, die DeleteUrlCacheEntry-Zeile ausführen.
[edit] C&P-Fehler, lpszSourceUrlName in lpszLocalFileName geändert [/edit]
Jakane - Fr 08.02.13 16:23
WasWeißDennIch hat folgendes geschrieben : |
Kleine Änderung:
Delphi-Quelltext 1: 2: 3: 4:
| repeat ShowMessage(Format('URL: %s%sLocalFilename: %s', [lpEntryInfo^.lpszSourceUrlName, sLineBreak, lpEntryInfo^.lpszLocalFileName])); |
Jetzt könnte man diese Infos auswerten und nur, wenn sie den vorgegebenen Kriterien entsprechen, die DeleteUrlCacheEntry-Zeile ausführen.
[edit] C&P-Fehler, lpszSourceUrlName in lpszLocalFileName geändert [/edit] |
Mit so einem Hinweis kann ich wirklich was anfangen, Danke.
Schwere Geburt :D
WasWeißDennIch - Fr 08.02.13 16:50
Jakane hat folgendes geschrieben : |
Schwere Geburt :D |
Das kannst Du laut sagen :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!