Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

BlueStarHH 15. Dez 2010 12:46

AW: IsFileInUse Funktion erstellen
 
Zitat:

Zitat von Luckie (Beitrag 1068664)
Zitat:

Zitat von BlueStarHH (Beitrag 1068659)
Wenn die neue API sagt, dass die Datei nicht in Benutzung ist, muss man nochmal mit der herkömlichen Methode prüfen, ob das wirklich stimmt. Also kein Hinderungsgrund die neue API zu nutzen.

Und warum nicht gleich die Fallback-Methode, wie auch immer sie implementiert ist, verwenden, wenn man sie so wie so zum Nachprüfen nutzt?

Weil man meines Wissens einige Funktionen, die die neue API anbietet, mit dem herkömmlichen weg nicht bewerkstelligen kann. Z.B. den Programmnamen herausfinden, von dem Prog, das die Datei nutzt. Oder das Programm dazu veranlassen die Datei zu schließen. Oder weil man dann laut Deiner Aussage einen Treiber braucht, was umständlich ist als eben mal eine API-Funktion zu nutzen. Vielleicht brauch man die Fallback-Methode auch gar nicht. Das war nur Spekulation. Ich habe mich nicht tief damit beschäftig. Nur mal schnell quergelesen.

Delphi-Laie 15. Dez 2010 15:12

AW: IsFileInUse Funktion erstellen
 
Neben dem sicher erstklassigen Unlocker, der die Bindungen durchbrechen kann, gibt es auch noch zum Zwecke des bloßen Anzeigens solcher Sperren das Programm "Who lock me?".

BlueStarHH 15. Dez 2010 15:18

AW: IsFileInUse Funktion erstellen
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1068696)
Neben dem sicher erstklassigen Unlocker, der die Bindungen durchbrechen kann, gibt es auch noch zum Zwecke des bloßen Anzeigens solcher Sperren das Programm "Who lock me?".

Ich brauche weder einen Unlocker noch ein Programm das mir die Sperren anzeigt. Ich brauche einen Quellcode, den ich in meinem eigenen Programm nutzen kann. Das wird von unbedarften Anwender genutzt, die Dateien immer mit Word oder Excel offen halten und dann in mein Programm importieren möchten. Das geht dann nicht, da Word oder Excel die Dateien exklusiv öffnen. Also sollte da die angesprochene Meldung gezeigt werden.

Assarbad 15. Dez 2010 15:23

AW: IsFileInUse Funktion erstellen
 
Zitat:

Zitat von BlueStarHH (Beitrag 1068699)
Ich brauche weder einen Unlocker noch ein Programm das mir die Sperren anzeigt. Ich brauche einen Quellcode, den ich in meinem eigenen Programm nutzen kann. Das wird von unbedarften Anwender genutzt, die Dateien immer mit Word oder Excel offen halten und dann in mein Programm importieren möchten. Das geht dann nicht, da Word oder Excel die Dateien exklusiv öffnen. Also sollte da die angesprochene Meldung gezeigt werden.

Siehe da. Ein wenig Kontext und es ist einfacher eine Aussage zu treffen, denn bei Word und Excel dürfte ohnehin die Methode mit der neuen API funktionieren.

Ansonsten verweise ich auf Chris: http://blog.delphi-jedi.net/2010/11/14/is-file-in-use/ und von dort aus https://jedi-apilib.svn.sourceforge....entExample.dpr

tony.huerlimann 15. Dez 2010 15:33

AW: IsFileInUse Funktion erstellen
 
// hier eine Function
// es braucht noch "uses shlobj" zu Beginn der unit Datei
// hope that helps : Gruss Tony

function IsFileInUse(fName:string) : boolean;
var HFileRes : HFILE;
begin
Result := False;
if not FileExists(fName) then
Exit;
HFileRes := CreateFile(pchar(fName),
GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
Result := (HFileRes = INVALID_HANDLE_VALUE);
if not Result then CloseHandle(HFileRes);
end;

DeddyH 15. Dez 2010 15:35

AW: IsFileInUse Funktion erstellen
 
Nunja, damit bekommst Du aber auch nicht raus, welcher Prozess die Datei geöffnet hat.

[edit] Sry, Willkommen in der DP :dp: [/edit]

BlueStarHH 15. Dez 2010 16:29

AW: IsFileInUse Funktion erstellen
 
Zitat:

Zitat von Assarbad (Beitrag 1068702)

Ich habe das FileIsInUseClientExample.dpr ausprobiert und eine XLSX Datei in Excel 2007 geöffnet. Beim Ausführen des Programm passiert nichts. Es wird gestartet und wieder beendet. Es erkennt also nicht, dass die Datei geöffnet ist. Der Speedcommander zeigt den gewüschten Dialog an, wenn ich die Datei löschen möchte. Also hat Excel die Datei auch exklusiv geöffnet.

Dezipaitor 15. Dez 2010 17:16

AW: IsFileInUse Funktion erstellen
 
Die Datei wird zwar von MS Office in der ROT registriert, doch die Implementierung nutzt nicht das IFileIsInUse Interface. Ein Indiz dazu ist, dass der Dialog keine Schalter für "Wechseln zu" und "Schließe Datei" besitzt, sondern "Wiederholen".

Naja, Speedcommander und Windows Explorer zeigen daher nur den Name der Anwendung an. Wenn es jedoch eine andere unbekannte Anwendung ist, dann zeigen beide auch nur "ein Programm" an.
Ich denke, dass ich die Implementierung kenne. Sie ist, wie man sieht, jedoch garnicht 100% treffsicher.

BlueStarHH 15. Dez 2010 17:27

AW: IsFileInUse Funktion erstellen
 
Zitat:

Zitat von Dezipaitor (Beitrag 1068724)
Naja, Speedcommander und Windows Explorer zeigen daher nur den Name der Anwendung an. Wenn es jedoch eine andere unbekannte Anwendung ist, dann zeigen beide auch nur "ein Programm" an.
Ich denke, dass ich die Implementierung kenne. Sie ist, wie man sieht, jedoch garnicht 100% treffsicher.

Welche Implementierung ist das? Wo kann ich den Code dazu finden? Hast Du ein kleinen Beispielcode? Danke!

Dezipaitor 15. Dez 2010 18:53

AW: IsFileInUse Funktion erstellen
 
Die gibt es noch nicht, das ist riesig aufwändig.
Und wenn ich so darüber nachdenke, dann wird es mit 64Bit schwierig, weil Delphi nur 32Bit Apps erstellen kann und daher nur 32Bit Dateilocks erkannt werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:46 Uhr.
Seite 2 von 3     12 3      

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