Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Job-Börse: Angebote und Gesuche (https://www.delphipraxis.net/66-job-boerse-angebote-und-gesuche/)
-   -   IsFileInUse Funktion erstellen (https://www.delphipraxis.net/156794-isfileinuse-funktion-erstellen.html)

himitsu 15. Dez 2010 19:07

AW: IsFileInUse Funktion erstellen
 
PS: In irgendeinem älterem Thread zu diesem Thema schwirrt ein Programm von mir rum, welches den "billigen" Standardtest umgeht.

Also wo man einfach versucht die Datei exklusiv zu öffnen, welches ja praktsich nur dann geht, wenn noch kein anderer die Datei geöffnet hat (abgesehn von fehlenden Zugriffsrechten, wo man eh keinen Zugriff hat).
Mein programm hatte also Zugriff, obwohl CreateFile meinte, die Datei sei nicht in Benutzung
und das nur mit der StandardWinAPI, ohne irgendwelche Hooks oder andere Hacks.



Und dann gab es noch die unwahrscheinliche Variante, wo man direkt auf den Datenträger zugreift und von hinten rum in die Datei reinkommt, aber seit Vista sollten die meißten Programme eh keinenZugriff auf die Festplatten bekommen (fehlende Rechte) und dann isses ja nicht soooooo einfach die passenden Cluster/Sektoren zur gewünschten Datei rauszufinden.

Dezipaitor 19. Dez 2010 22:50

AW: IsFileInUse Funktion erstellen
 
Also, nach langem hin under her, habe ich nun eine Methode gefunden, die den Prozessnamen (d.h. Friendly Name) ermitteln kann. Ohne Treiber oder anderer schlimmer Sachen.
Wer Interesse hat, kann sich bei mir melden.

generic 19. Dez 2010 23:39

AW: IsFileInUse Funktion erstellen
 
Zitat:

Zitat von Dezipaitor (Beitrag 1069463)
Wer Interesse hat, kann sich bei mir melden.

Hau das doch bitte in die CodeLib der DP.

himitsu 20. Dez 2010 04:12

AW: IsFileInUse Funktion erstellen
 
Zitat:

Zitat von Dezipaitor (Beitrag 1069463)
Also, nach langem hin under her, habe ich nun eine Methode gefunden, die den Prozessnamen (d.h. Friendly Name) ermitteln kann.

Wenn man das Dateihandle vererben darf, ums in seinen Prozess zu kopieren und wenn die Datei mindestens 1 Byte groß ist (weil man's sonst nicht laden kann), dann gibt es einen Weg über MMF.

alzaimar 20. Dez 2010 04:31

AW: IsFileInUse Funktion erstellen
 
Ursprünglich ging es darum, einem DAU mitzuteilen, das die Datei, die von einer Anwendung importiert werden soll, gerade von WORD oder EXCEL blockiert ist.

Also ich würde das ganz einfach mit CopyFile lösen: Arbeitskopie erstellen und die dann importieren. EXCEL und WORD erlauben das, denn sonst würde man wohl kaum geöffnete Dateien per Mail versenden können.

Natürlich bekommt der unbedarfte Anwender dann keine Nachricht, das die Datei blockiert ist. Muss er aber auch nicht, oder?

sh17 20. Dez 2010 08:58

AW: IsFileInUse Funktion erstellen
 
Zitat:

Zitat von generic (Beitrag 1069467)
hau das doch bitte in die codelib der dp.

ack

Dezipaitor 20. Dez 2010 11:31

AW: IsFileInUse Funktion erstellen
 
Zitat:

Zitat von sh17 (Beitrag 1069498)
Zitat:

Zitat von generic (Beitrag 1069467)
hau das doch bitte in die codelib der dp.

ack

Tut mir leid, das werde ich nicht tun. Das war viel zu viel Aufwand, um es nun einfach so zu verschenken. Aber wer es wirklich will, kann sich gerne melden. Da wird sich sicher was machen lassen.

Luckie 20. Dez 2010 11:34

AW: IsFileInUse Funktion erstellen
 
Aber um das von Nico angesprochene Problem http://www.michael-puff.de/Artikel/FileUnlocker.shtml kommst du auch ohne Treiber nicht drumherum oder?

Dezipaitor 20. Dez 2010 12:41

AW: IsFileInUse Funktion erstellen
 
Naja, am besten ist es immernoch, wenn man dem Benutzer zeigen kann, welcher Prozess denn dafür verantwortlich ist. D.h. vielleicht ist ja noch ein MS Word geöffnet irgendwo.
Meine Funktion nutzt neben IFileIsInUse noch andere Methoden ohne Treiber, um den benutzerfreundlichen Namen (z.B. Microsoft Word) und die ProzessID herauszufinden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:28 Uhr.
Seite 3 von 3     123   

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