![]() |
Noch ein zugriff auf Datei ?
Bin der Meinnug das alle Handles und threads der verwendeten Daten geschlossen sind
Trotzdem bekomme ich in "finalization" beim löschen einer Datei zugriff verweigert. Wie kann ich vorher testen ob diese auch wirklich geschlossen ist damit sie gelöscht werden kann? Edit: Prüfe mit einer Function hier aus dem Forum vorher ob es möglich ist die Datei zu löschen es wird ein true zurückgegeben .. diese scheint nur zu prüfen ab ein generelles löschen möglich ist aber nicht zum jetzigen zeitpunkt
Delphi-Quellcode:
gruss Emil
if CheckAccessToFile(FILE_DELETE, // check for generic write access
thePath + '~tmp4358.dat')=true then; if DeleteFile(thePath + '~tmp4358.dat') = false then MessageBox(0, PChar(SysErrorMessage(GetLastError)), 'Confirm', MB_OK or MB_ICONINFORMATION); |
Re: Noch ein zugriff auf Datei ?
Moin Emil,
in Delphi solltest du einen booleschen Ausdruck nicht redundant erweitern:
Delphi-Quellcode:
Boolsche Werte werden auf Integer-Werte abgebildet und umgekehrt. Für Delphi gibt es eine Abbildungsregel, API-Funktionen verwenden mitunter eine abweichende. Dies nur am Rande.
begin
// ... if DeleteFile(thePath + '~tmp4358.dat') {= False} then MessageBox(0, PChar(SysErrorMessage(GetLastError)), 'Confirm', MB_OK or MB_ICONINFORMATION); // ... end; Zu deinem eigentlichen Problem: Wenn du eine Datei im Abschnitt finalization löschen willst, dann solltest du sie im Abschnitt initialization bereitgestellt haben. Arbeitest du dabei mit API-Funktionen wie CreateFile() oder mit Delphi Streams oder mit den alten Prozeduren AssignFile() etc.? Zu welchem Zeitpunkt besorgst du dir den Zugriff auf die temporäre Datei? Wann und wo schließt du sie? Freundliche Grüße |
Re: Noch ein zugriff auf Datei ?
Mich irritiert außerdem das Semikolon hinter der 2. Codezeile.
|
Re: Noch ein zugriff auf Datei ?
Zitat:
ich initialisiere (loadlibrary) in meiner INIT Routine könnte ich in die initializations routine verschieben wäre kein problem. Mit Delphi Stream wird aus der resource eingeladen in dieser besagten INIT Routine Angesprochen wird sie sobald ein zugriff auf ein plugin stattfindet sie bleibt im speicher und wird nicht immer wieder gelöscht(freigegeben) denke ist nicht nötig da nur 4K groß ich schließe sie in finilization bevor ich sie lösche... was nicht geht. Uwe meint es hätte mit dem DllCache zu tun (Ich schätze mal, das das daran liegt, das DLL's gecached werden.) Edit: habs nochmal versucht! So siehts aus .. gleiche problem mit dem löschen..
Delphi-Quellcode:
gruss Emil
initialization
begin getVisHeader := nil; //Wasabi initialisieren SetLength(thePath, MAX_PATH) ; lng := GetTempPath(MAX_PATH, PChar(thePath)) ; SetLength(thePath, lng) ; ResStream := TResourceStream.Create(HInstance, 'DLL', 'DATA'); ResStream.SaveToFile(thePath + '~tmp4358.dat'); SetFileAttributes(PChar(thePath + '~tmp4358.dat'), FILE_ATTRIBUTE_HIDDEN); ResStream.free; WAServiceHandle := Loadlibrary(PChar(thePath + '~tmp4358.dat')); if (WAServiceHandle = 0) then begin MessageBox(0, 'Error loading GetAPIService', 'initialization', MB_OK or MB_ICONERROR); halt; end; end finalization begin CloseVisDLL; if (WAServiceHandle <> 0) then begin FreeLibrary(WAServiceHandle); WAServiceHandle := 0; end; if (DeleteFile(thePath + '~tmp4358.dat') = false) then MessageBox(0, PChar(SysErrorMessage(GetLastError)), 'Confirm', MB_OK or MB_ICONINFORMATION); end |
Re: Noch ein zugriff auf Datei ?
Zitat:
Hat aber keinen einfluss auf meine frage das die Datei nicht gelöscht wird gruss Emil |
Re: Noch ein zugriff auf Datei ?
Zitat:
|
Re: Noch ein zugriff auf Datei ?
Zitat:
Denn im temp Order wird jeder zugriff auf die dateien zum löschen haben. gruss Emil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz