Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TSaveDialog verursacht Sperrung von Windows-Ordnern (https://www.delphipraxis.net/155388-tsavedialog-verursacht-sperrung-von-windows-ordnern.html)

JürgenP 21. Okt 2010 09:26

TSaveDialog verursacht Sperrung von Windows-Ordnern
 
Hallo

ich habe festgestellt, dass unter Windows2000 und XP nach der Verwendung von TSaveDialog/TOpenDialog der Zielordner gesperrt wird. Die Sperrung hat nichts mit der verwendeten Datei zu tun. Ab Vista und Win7 tritt dieses Problem nicht mehr auf.
Ich verwende Delphi 6, 2007 und 2010.

Delphi-Quellcode:
procedure TForm12.btn1Click(Sender: TObject);
var
  aSaveDlg: TSaveDialog;
begin
  aSaveDlg:= TSaveDialog.Create(nil);
  try
    if aSaveDlg.Execute then
      ShowMessage(aSaveDlg.FileName);
  finally
    aSaveDlg.Free;
  end;
end;
Wenn ich nun den Zielordner umbenennen/löschen möchte, meldet Windows folgendes:
"xxx kann nicht umbenannt werden: Eine Zugriffsverletzung ist aufgetreten. Die Quell- oder Zieldatei ist möglicherweise geöffnet."
Diese Ordnersperre bleibt bis zum Ende des Programmes erhalten.

Wie kann ich diese lästige Ordnersperre verhindern?

Luckie 21. Okt 2010 09:31

AW: TSaveDialog verursacht Sperrung von Windows-Ordnern
 
Das ist mir noch nie aufgefallen. Muss ich nachher mal zu Hause unter XP ausprobieren.

Aber kann es sein, dass du in deinem Programm eine Datei in dem Ordner öffnest und diese nicht wieder schleißt bzw. erst bei Programmende?

JürgenP 21. Okt 2010 09:43

AW: TSaveDialog verursacht Sperrung von Windows-Ordnern
 
Zitat:

Zitat von Luckie (Beitrag 1056864)
Das ist mir noch nie aufgefallen. Muss ich nachher mal zu Hause unter XP ausprobieren.

Aber kann es sein, dass du in deinem Programm eine Datei in dem Ordner öffnest und diese nicht wieder schleißt bzw. erst bei Programmende?

Von einer Datei ist dieser Effekt nicht abhängig, da er auch bei obigem Beispiel auftritt. Und dort wird keine Datei verwendet, sondern nur eine Meldung einer möglichen Zieldatei ausgegeben.

himitsu 21. Okt 2010 10:10

AW: TSaveDialog verursacht Sperrung von Windows-Ordnern
 
Das ist in Problem in Windows.

Erstmal läßt dieses bei Verwendung dieses Dialogs leider manchmal einige Dateihandle (für Ordnerzugriffe) geöffnet und dann ändert dieser Dialog das aktuelle Verzeichnis (MSDN-Library durchsuchenGetCurrentDir) und läßt dieses nach Schließen des Dialogs auch dort.

Fazit: Es wird wirklich noch auf dieses Verzeichnis zugegriffen und demnach kann man dann da auch nix ändern.

Lösungen:

- Das aktuelles Verzeichnis via MSDN-Library durchsuchenSetCurrentDir z.B. auf
Delphi-Quellcode:
ParamStr(0)
oder
Delphi-Quellcode:
Application.ExeName
setzen.

- Für die vergessenen Dateihandle gibt's keine wirkliche Lösung.
In einem Projekt hatte ich mal vor Aufruf alle Dateihandle des Programms aufgelistet, nach dem Aufruf nochmal und dann alle neuen Handles manuell geschlossen.
> Leider war das Auslesen zu "aufwändig" und das Schließen brachte manchmal Nebenwirkungen, so daß ich dieses nicht mehr mache.

shmia 21. Okt 2010 13:36

AW: TSaveDialog verursacht Sperrung von Windows-Ordnern
 
Wie schauts denn mit dem Online-Virenscanner aus?
Der Scanner hat ja nichts besseres zu tun, als sich jede Datei und jedes Verzeichnis sofort zu krallen und zu scannen.

Mit dem Tool Who Locked Me kannst du rausfinden, welcher Prozess eine Datei oder Verzeichnis gesperrt hat.
Dazu das Verzeichnis mit rechter Maustaste anklicken und "Who locked me?..." im Kontextmenu auswählen.

p80286 21. Okt 2010 15:58

AW: TSaveDialog verursacht Sperrung von Windows-Ordnern
 
Zitat:

Zitat von JürgenP (Beitrag 1056862)
Hallo

ich habe festgestellt, dass unter Windows2000 und XP nach der Verwendung von TSaveDialog/TOpenDialog der Zielordner gesperrt wird. Die Sperrung hat nichts mit der verwendeten Datei zu tun. Ab Vista und Win7 tritt dieses Problem nicht mehr auf.

Ich vermute mal Da bist Du vor die Berechtigungs-Wand gelaufen.
Was verstehst Du unter einem "Windows-Ordner"?

Es würde mich nicht wundern, wenn man als nicht-Admin ein paar auf die Finger bekommt, wenn man versucht z.B. C:\Programme in C:\Fremdsoftware um zu benennen.

Unter Vista / 7 gibt es ja die Einrichtung dieser virtuellen Verzeichnisse, mit denen kannst Du ja anstellen was Du willst, nach dem nächsten Booten ist wieder alles beim alten.
(und irgendwo lauern dann Deine Sünden der letzten 3Monate/Jahre...)

Gruß
K-H

himitsu 21. Okt 2010 17:59

AW: TSaveDialog verursacht Sperrung von Windows-Ordnern
 
Zitat:

Zitat von shmia (Beitrag 1056931)
Mit dem Tool Who Locked Me kannst du rausfinden, welcher Prozess eine Datei oder Verzeichnis gesperrt hat.

Du läßt eine schon über ein Jahr alte BETA auf ein System los? (an Welcher wohl nicht viel gemacht wird)

Wenn, dann doch lieber ein ausgewachsenes Projekt, welches (bei mit) seit Jahren erfolgreich im Einsatz ist und noch keine Probleme verursacht hat
http://ccollomb.free.fr/unlocker/
http://www.chip.de/downloads/Unlocke..._18414122.html
(auf der Seite gibt es seit 'ner Weile aber auch noch eine Liste anderer/alternativer FileUnlocker)

Die Tools von Sysinternals sind auch sehr empfehlenswert, aber für diesen Zweck sind sie etwas "umständlich".

nahpets 22. Okt 2010 07:14

AW: TSaveDialog verursacht Sperrung von Windows-Ordnern
 
Hallo,

habe gerade kein Delphi in Reichweite, deshalb aus der Erinnerung:

Es müsste bei den Dateidialogen in den Optionen auch eine geben, die das Wechseln des Verzeichnisses, bei der Dateiauswahl, verhindert. Das könnte Dir weiterhelfen.

Normalerweise wechseln die Dialoge (wie himitsu weiter oben schon anführte) in das Verzeichnis, aus dem man eine Datei auswählt, bzw. in das man eine Datei schreibt. Damit ist das Verzeichnis solange "in Gebrauch", bis über einen Dialog (oder einen Programmbefehl) ein anderes Verzeichnis auswählt oder das Programm beendet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:11 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