Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi deletefile und Konsorten (https://www.delphipraxis.net/143264-deletefile-und-konsorten.html)

p80286 12. Nov 2009 17:59


deletefile und Konsorten
 
Hallo zusammen,

Falls ich hier falsch bin, bitte ich um Entschuldigung, aber das WinAPI hätte genauso gut/schlecht gepasst.

Mir geht es um das Löschen von Dateien.
Mein Problem sind Dateien, die einen Schreibschutz haben , versteckt und/oder Systemdateien sind.
(Ja, es geht um die nicht entsorgten Reste von Word)

mit DeleteFile komme ich nicht weiter, und Erase wollte ich nicht einsetzten, weil dann vorher das Assign erfolgen muß.
Daher hab ich es mit SHFileOperation und FOF_Silent or FOF_NoConfirmation gemacht.

Jetzt wird ohne nervige Rückfragen gelöscht und das war ja auch meine Absicht.

Trotzdem habe ich zwei Fragen hierzu:

a) kann man "rückzufragende " Dateien irgendwie definieren? ( z.B. System-Dateien Rückfragen ; Hidden-Dateien ohne Rückfrage löschen)

b) gibt es noch eine andere Möglichkeit Dateien zu löschen?

(vorauswahl mit Findfirst ist mir jetzt etwas zu aufwendig aber wenn's nichts anderes gibt)

Gruß
K-H

himitsu 12. Nov 2009 18:08

Re: deletefile und Konsorten
 
Das Problem bei SysUtils.Delphi-Referenz durchsuchenDeleteFile bzw. Windows.MSDN-Library durchsuchenDeleteFile läßt sich mit MSDN-Library durchsuchenSetFileAttributes beheben

und mit der Umkehrfunktion MSDN-Library durchsuchenGetFileAttributes kann man, wie auch schon via Delphi-Referenz durchsuchenFindFirst/MSDN-Library durchsuchenFindFirstFile, die Attribute erhalten und auswerten.

p80286 12. Nov 2009 18:16

Re: deletefile und Konsorten
 
Entschuldige
vielleicht habe ich mich mißverständlich ausgedrückt.
ich würde gerne eine "parametrisierte Löschfunktion" haben, so es sie denn gibt.

Sonst wäre das Pärchen GetFileattribute, SetFileattribute natürlich nicht schlecht, weil dann gleich das Deletefile angesteuert werden kann.

Vielen Dank
K-H

toms 12. Nov 2009 18:23

Re: deletefile und Konsorten
 
Vielleicht mit ICopyHook::CopyCallback

Zitat:

If a copy callback handler is exposed and registered, SHFileOperation calls it unless you set a flag such as FOF_NOCONFIRMATION in the fFlags member of the structure pointed to by lpFileOp. See ICopyHook::CopyCallback for details on implementing copy callback handlers.

p80286 13. Nov 2009 15:19

Re: deletefile und Konsorten
 
Hallo zusammen,

nach Euren Anregungen (vielen Dank nochmals!)
bin ich auf folgendes gekommen:

vorhandene und teilweise versteckt dokumentierte Dateiattribute:
Code:
$00000001 FILE_ATTRIBUTE_READONLY
$00000002 FILE_ATTRIBUTE_HIDDEN
$00000004 FILE_ATTRIBUTE_SYSTEM
$00000010 FILE_ATTRIBUTE_DIRECTORY
$00000020 FILE_ATTRIBUTE_ARCHIVE
$00000040 FILE_ATTRIBUTE_DEVICE        // Do not Use!!!!
$00000080 FILE_ATTRIBUTE_NORMAL
$00000400 FILE_ATTRIBUTE_REPARSEPOINT
$00000100 FILE_ATTRIBUTE_TEMPORARY
$00000800 FILE_ATTRIBUTE_COMPRESSED
$00001000 FILE_ATTRIBUTE_OFFLINE
$00002000 FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
$00004000 FILE_ATTRIBUTE_ENCRYPTED
$00010000 FILE_ATTRIBUTE_VIRTUAL
diese Attribute sind teilweise nicht in der Windows.Pas vorhanden was aber von Version zu Version unterschiedlich ist.

DeleteFile steigt nur bei FILE_ATTRIBUTE_HIDDEN aus. Alle anderen Attribute behindern den Löschvorgang nicht (XP SP3 Prof)

Da ich für meine Aufgabe auch das Dateidatum beachten muß
werde ich wie folgt vorgehen
Code:
GetFileAttributesEX(Dateiname,GetFileExInfoStandard, @DateiInfo);
if Dateidatumzulassig(DateiInfo) then begin
  if (DateiInfo.dwFileAttributes and FILE_ATTRIBUTE_HIDDEN) >0 then
    Setfileattributes(Dateiname,FILE_ATTRIBUTE_NORMAL);
  Deletefile(Dateiname);
end;
Vielen Dank nochmal für Eure Anregungen!

Gruß
K-H

DeddyH 13. Nov 2009 15:23

Re: deletefile und Konsorten
 
Ich frage mich nur, wieso Du noch auf Hidden abfragst, bevor Du die Datei löschst. Du könntest doch genausogut "auf Verdacht" einfach alle Dateiattribute entfernen und dann löschen.

p80286 13. Nov 2009 15:39

Re: deletefile und Konsorten
 
Warum mehr tun als notwendig?
Die Abfrage brauch ich (Datum und Attribute), wenn dann Hidden gesetzt ist, dann werden die Attribute neu gesetzt ansonsten wird nichts gemacht.
Zum einen werde ich den Test auf Hidden für andere Attribute wohl ausbauen (müssen), zum anderen spare ich mir so einen Arbeitsschritt. Insbesonders auf Netzlaufwerken verspreche ich mir da einen Vorteil.

Gruß
K-H

DeddyH 13. Nov 2009 15:42

Re: deletefile und Konsorten
 
Du tust doch IMO bereits jetzt mehr als notwendig. Was ich meinte:
Delphi-Quellcode:
//GetFileAttributesEX(Dateiname,GetFileExInfoStandard, @DateiInfo);
if Dateidatumzulassig(DateiInfo) then begin
//  if (DateiInfo.dwFileAttributes and FILE_ATTRIBUTE_HIDDEN) >0 then
  if Setfileattributes(Dateiname,FILE_ATTRIBUTE_NORMAL) then
    Deletefile(Dateiname);
end;

p80286 13. Nov 2009 16:18

Re: deletefile und Konsorten
 
das GetFileAttributesEX brauch ich, um an das Dateidatum zu kommen.
(nicht in jedem Fall arbeite ich vorher mit FindFirst/FindNext über das ich die Werte ja auch bekäme)
Und für jede Datei dann das Attribut zusetzen, bei manchmal 100 oder mehr Dateien, halte ich für ziemlich aufwendig, oder nicht?

Gruß
K-H

DeddyH 13. Nov 2009 19:46

Re: deletefile und Konsorten
 
Zitat:

Zitat von p80286
(nicht in jedem Fall arbeite ich vorher mit FindFirst/FindNext über das ich die Werte ja auch bekäme)

OK, dann stellt sich das anders dar. Das sollte ja auch keine Kritik sein, ich hatte mich nur gewundert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 Uhr.
Seite 1 von 2  1 2      

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