AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

IsFileInUse Funktion erstellen

Ein Thema von BlueStarHH · begonnen am 15. Dez 2010 · letzter Beitrag vom 20. Dez 2010
Antwort Antwort
Seite 2 von 3     12 3      
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: IsFileInUse Funktion erstellen

  Alt 15. Dez 2010, 13:46
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.

Geändert von BlueStarHH (15. Dez 2010 um 13:49 Uhr)
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#12

AW: IsFileInUse Funktion erstellen

  Alt 15. Dez 2010, 16:12
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?".
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: IsFileInUse Funktion erstellen

  Alt 15. Dez 2010, 16:18
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.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#14

AW: IsFileInUse Funktion erstellen

  Alt 15. Dez 2010, 16:23
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
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
tony.huerlimann

Registriert seit: 15. Dez 2010
6 Beiträge
 
Delphi 2010 Enterprise
 
#15

AW: IsFileInUse Funktion erstellen

  Alt 15. Dez 2010, 16:33
// 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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#16

AW: IsFileInUse Funktion erstellen

  Alt 15. Dez 2010, 16:35
Nunja, damit bekommst Du aber auch nicht raus, welcher Prozess die Datei geöffnet hat.

[edit] Sry, Willkommen in der DP [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: IsFileInUse Funktion erstellen

  Alt 15. Dez 2010, 17:29
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.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#18

AW: IsFileInUse Funktion erstellen

  Alt 15. Dez 2010, 18:16
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.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: IsFileInUse Funktion erstellen

  Alt 15. Dez 2010, 18:27
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!
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#20

AW: IsFileInUse Funktion erstellen

  Alt 15. Dez 2010, 19:53
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.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 00:29 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