Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Datei überprüfen, ob löschbar (https://www.delphipraxis.net/88578-datei-ueberpruefen-ob-loeschbar.html)

xZise 17. Mär 2007 12:58


Datei überprüfen, ob löschbar
 
Wie kann ich überprüfen, ob eine Datei löschbar ist ohne sie gleich zu löschen?

Jelly 17. Mär 2007 13:08

Re: Datei überprüfen, ob löschbar
 
Es gibt einige Gründe, warum eine Datei nicht gelöscht werden kann:
  • Keine nötigen NTFS Rechte
  • Keine nötigen Sharerechten bei Netzfreigaben
  • Datei ist grad in Gebrauch durch einen anderen Prozess
  • Read-Only Attribut in den Dateiattributen gesetzt
Was du aber eventuell machen kannst, ist anstatt alles irgendwie kompliziert zu prüfen, einfach versuchen die Datei umzubenennen. Denn wenn das klappt, sollte das Löschen auch funktionieren.

xZise 17. Mär 2007 15:56

Re: Datei überprüfen, ob löschbar
 
Ich machs jetzt mit umbenennen..

xZise 18. Mär 2007 09:18

Re: Datei überprüfen, ob löschbar
 
Sry wegen Doppelpost, aber Jellys Idee ist zwar genial, aber hat einen Hacken: Die Exe ist unbenutztbar... Da sie ständig umbenannt wird...

Und die Date kann man umbenennen, wenn die exe ausgeführt wird...

Hawkeye219 18. Mär 2007 09:52

Re: Datei überprüfen, ob löschbar
 
Hallo Fabian,

versuche es mal mit dieser Funktion:

Delphi-Quellcode:
function IsFileInUse (const aFileName: string): Boolean;
var
  hnd : THandle;
begin
  hnd := CreateFile(PChar(aFileName), GENERIC_WRITE, 0, nil, OPEN_EXISTING,
                                      FILE_ATTRIBUTE_NORMAL, 0);
  if (hnd = INVALID_HANDLE_VALUE) then
    Result := True
  else
    begin
      CloseHandle(hnd);
      Result := False;
    end;
end;
Ich weiß nicht, ob sie alle möglichen Fälle abdeckt. Vielleicht kann das mal einer der WinAPI-Experten prüfen.

Gruß Hawkeye

himitsu 18. Mär 2007 10:12

Re: Datei überprüfen, ob löschbar
 
Damit kann man schonmal prüfen ob eine anderes Programm die Datei geöffnet hat, aber alleine dieses hat keine Aussagekraft.

Denn es macht zwar selten wer, aber wenn die Datei mit FILE_SHARE_DELETE geöffnet ist, dann ist es dennoch möglich diese Datei auch zu löschen.
IsFileInUse verrsucht die Daei ohne ShareingRechten zu öffnen und dieses geht nur wenn sie noch nicht geöffnet ist.


Also das einfachste ist einfach versuchen zu löschen,
oder eben umzubennenen (welches man sich als umkopieren und löschen vorstellen kann)


Ansonsten muß man schließlich erstmal prüfen ob die Datei existiert.
- was nicht da ist, kann nicht gelöscht werden

Dann wären die ganzen NTFS-Zugriffsrechte.
- hat das Programm überhaupt das Recht die Datei zu löschen

Ist die Datei von anderen Programmen geöffnet und wenn ja, haben diese Programme das Löschen erlaubt.

Und zum Schluß: ist der Datenträger schreibgeschützt
- z.B. bei CDs/DVDs, Disketten, USB-Sticks und andere Wechseldatenträgern

xZise 18. Mär 2007 11:30

Re: Datei überprüfen, ob löschbar
 
Es handelt sich um eine exe, welche man übrigens umbennen kann, aber nicht löschen kann, wenn die Datei läuft!

himitsu 18. Mär 2007 12:09

Re: Datei überprüfen, ob löschbar
 
Zitat:

Zitat von xZise
Es handelt sich um eine exe, welche man übrigens umbennen kann, aber nicht löschen kann, wenn die Datei läuft!

Ach na dann, da ist halt das Problem, das die datei nicht mehr über ein Filehandle geöffnet ist, sondern direkt in den Speicher gemappt wird.
Hier ist dann sozusagen nur der Dateiihnhalt gesperrt und nicht die Datei selber.

Also da kannst du nur versuchen zu löschen, oder du mußt zusätzlich noch in allen Prozessen suchen, ob einer zu dieser Datei gehört.


Das Selbe Problem gibt's dann auch bei DLLs und dergleichen.


Ist das für 'ne Art Setup-/Updatefunktion?

[add]
grad eben den Doppelpost gesehn hab :nerd:

xZise 18. Mär 2007 12:16

Re: Datei überprüfen, ob löschbar
 
Zitat:

Zitat von himitsu
Ist das für 'ne Art Setup-/Updatefunktion?

[add]
grad eben den Doppelpost gesehn hab :nerd:

Ja genau.

Ich habe bisher keine Komponente gefunden, die das so macht wie ich will (ich will sie über mein Prog downloaden)..

DP-Maintenance 18. Mär 2007 12:36

DP-Maintenance
 
Dieses Thema wurde von "SirThornberry" von "Object-Pascal / Delphi-Language" nach "Windows API / MS.NET Framework API" verschoben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:55 Uhr.
Seite 1 von 2  1 2      

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