AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Datei überprüfen, ob löschbar
Thema durchsuchen
Ansicht
Themen-Optionen

Datei überprüfen, ob löschbar

Ein Thema von xZise · begonnen am 17. Mär 2007 · letzter Beitrag vom 18. Mär 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

Datei überprüfen, ob löschbar

  Alt 17. Mär 2007, 13:58
Wie kann ich überprüfen, ob eine Datei löschbar ist ohne sie gleich zu löschen?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

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

  Alt 17. Mär 2007, 14:08
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.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

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

  Alt 17. Mär 2007, 16:56
Ich machs jetzt mit umbenennen..
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#4

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

  Alt 18. Mär 2007, 10:18
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...
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

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

  Alt 18. Mär 2007, 10:52
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 18. Mär 2007, 11:12
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
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#7

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

  Alt 18. Mär 2007, 12:30
Es handelt sich um eine exe, welche man übrigens umbennen kann, aber nicht löschen kann, wenn die Datei läuft!
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

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

  Alt 18. Mär 2007, 13:09
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
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#9

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

  Alt 18. Mär 2007, 13:16
Zitat von himitsu:
Ist das für 'ne Art Setup-/Updatefunktion?

[add]
grad eben den Doppelpost gesehn hab
Ja genau.

Ich habe bisher keine Komponente gefunden, die das so macht wie ich will (ich will sie über mein Prog downloaden)..
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
18. Mär 2007, 13:36
Dieses Thema wurde von "SirThornberry" von "Object-Pascal / Delphi-Language" nach "Windows API / MS.NET Framework API" verschoben.
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 20:11 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