AGB  ·  Datenschutz  ·  Impressum  







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

TSaveDialog verursacht Sperrung von Windows-Ordnern

Ein Thema von JürgenP · begonnen am 21. Okt 2010 · letzter Beitrag vom 22. Okt 2010
Antwort Antwort
JürgenP

Registriert seit: 19. Sep 2010
7 Beiträge
 
#1

TSaveDialog verursacht Sperrung von Windows-Ordnern

  Alt 21. Okt 2010, 09:26
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?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: TSaveDialog verursacht Sperrung von Windows-Ordnern

  Alt 21. Okt 2010, 09:31
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
JürgenP

Registriert seit: 19. Sep 2010
7 Beiträge
 
#3

AW: TSaveDialog verursacht Sperrung von Windows-Ordnern

  Alt 21. Okt 2010, 09:43
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#4

AW: TSaveDialog verursacht Sperrung von Windows-Ordnern

  Alt 21. Okt 2010, 10:10
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 ParamStr(0) oder 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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

AW: TSaveDialog verursacht Sperrung von Windows-Ordnern

  Alt 21. Okt 2010, 13:36
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.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: TSaveDialog verursacht Sperrung von Windows-Ordnern

  Alt 21. Okt 2010, 15:58
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#7

AW: TSaveDialog verursacht Sperrung von Windows-Ordnern

  Alt 21. Okt 2010, 17:59
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".
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (21. Okt 2010 um 18:01 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#8

AW: TSaveDialog verursacht Sperrung von Windows-Ordnern

  Alt 22. Okt 2010, 07:14
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:54 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