![]() |
Datei überprüfen, ob löschbar
Wie kann ich überprüfen, ob eine Datei löschbar ist ohne sie gleich zu löschen?
|
Re: Datei überprüfen, ob löschbar
Es gibt einige Gründe, warum eine Datei nicht gelöscht werden kann:
|
Re: Datei überprüfen, ob löschbar
Ich machs jetzt mit umbenennen..
|
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... |
Re: Datei überprüfen, ob löschbar
Hallo Fabian,
versuche es mal mit dieser Funktion:
Delphi-Quellcode:
Ich weiß nicht, ob sie alle möglichen Fälle abdeckt. Vielleicht kann das mal einer der WinAPI-Experten prüfen.
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; Gruß Hawkeye |
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 |
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!
|
Re: Datei überprüfen, ob löschbar
Zitat:
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: |
Re: Datei überprüfen, ob löschbar
Zitat:
Ich habe bisher keine Komponente gefunden, die das so macht wie ich will (ich will sie über mein Prog downloaden).. |
DP-Maintenance
Dieses Thema wurde von "SirThornberry" von "Object-Pascal / Delphi-Language" nach "Windows API / MS.NET Framework API" verschoben.
|
Re: Datei überprüfen, ob löschbar
Und wie willst du es genau machen?
ist zwar och auch einem deiner Threads, abver was solls :roll: > ![]() oder
Delphi-Quellcode:
While not DeleteFile('irgendwas') do Sleep(100);
... Und wie du inzwischen gemerkt hast, es gibt unmassen an Möglichkeiten, warum eine Datei nicht gelöscht werden kann PS: in einem der Programme nutze ich in etwa die selbe Methode, wie die bei den geladenen EXEn ^^ ![]() |
Re: Datei überprüfen, ob löschbar
Also... Der AMP (dein 1. gelinkter Thread) hat damit nichts zu tun... Da ging es um eine "Entfern"-Routine
Und inzwischen hat sich das etwas geändert: Und zwar hab ich eine Datei gedownloadet und möchte die kopieren... Und dazu brauch ich die Rechte... |
Re: Datei überprüfen, ob löschbar
Erstmal versuhen die Datei zu Löschen/Upzudaten.
Und wenn das nicht geht, dann könntest du versuchen rauszufinden warum dieses nicht geht. (z.B. sagen einige Setup-Programme dann dem User wer diese Datei geöffnet hält)
Delphi-Quellcode:
T := GetTickCount;
While not DeleteFile('abc') do If GetTickCount - T > 15000 Then MessageBox('Datei kann nicht gelöscht werden.'); // oder T := GetTickCount; While not CopyFile('abc', 'def', True) do If GetTickCount - T > 15000 Then MessageBox('Datei kann nicht kopiert werden.'); // oder ... Wenn es um diesen Downloadprogramm geht, dann könntest ja auch in die Datei mit reinschreiben lassen welche Programme nicht laufen dürfen und eventuell diese sich Programme beenden lassen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 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