AGB  ·  Datenschutz  ·  Impressum  







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

Datei bereits in Benutzung

Ein Thema von Alex_ITA01 · begonnen am 26. Mär 2009 · letzter Beitrag vom 30. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#1

Datei bereits in Benutzung

  Alt 26. Mär 2009, 11:24
Hallo zusammen,
ich habe hier folgenden Source gefunden, um herauszufinden, dass eine Datei bereits in Benutzung ist (bereits lesend geöffnet).

Delphi-Quellcode:
function IsFileUsed(const FileName:String): Boolean;
  const
    AccessMode: array[0..2] of LongWord = (
      GENERIC_READ,
      GENERIC_WRITE,
      GENERIC_READ or GENERIC_WRITE);
    ShareMode: array[0..4] of LongWord = (
      0,
      0,
      FILE_SHARE_READ,
      FILE_SHARE_WRITE,
      FILE_SHARE_READ or FILE_SHARE_WRITE);
  var
    Mode : LongWord;
    iRes : INTEGER;
  begin
    Mode := fmOpenRead or fmShareDenyWrite;
    iRes := -1;
    if ((Mode and 3) <= fmOpenReadWrite) and
      (((Mode and $F0) shr 4) <= fmShareDenyNone) then
      iRes := Integer(CreateFile(PChar(FileName),
                        AccessMode[Mode and 3],
                        ShareMode[(Mode and $F0) shr 4],
                        nil,
                        OPEN_EXISTING,
                        FILE_ATTRIBUTE_NORMAL,
                        0));
      If iRes < 0 then
          Result := True
        else
          Result := False;
    If Not Result then CloseHandle(THandle(iRes));
  end;
Mein Problem ist, dass ich von einem PC (X) auf eine Datei die auf dem PC (Y) liegt zugreife mit einem MemoryStream.LoadfromFile(Dateiname).
Ich habe LoadFromFile überschrieben und beim öffnen der Datei ein fmShareExclusive angegeben, damit kein anderer mehr darauf schreiben oder lesen kann.
Wenn ich jetzt aber vom PC (X) auch diese Datei öffnen will (fmOpenRead als Stream), dann dauert es ca. 40sek, bis das TFileStream.Create eine Exception auslöst und mir mitteilt, dass der Versuch die Datei zu öffnen schief ging. Auch die erwähnte Funktion oben, liefert mir nicht sofort (ca. 40sek) später, dass die Datei in Benutzung ist. Die Datei ist relativ groß und der Zugriff von PC (Y) dauert auch wesentlich länger als 40sek.
Habt ihr noch Ratschläge, wie ich herausbekomme, dass die Datei in Benutzung ist mit einer "Spontanantwort"?
Viele Grüße
Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Datei bereits in Benutzung

  Alt 26. Mär 2009, 13:37
Worüber greifst du denn auf die Datei zu?

das Problem hierbei ist, daß du nicht direkt auf die Datei zugreifst, sondern über irgendein Freigabesystem und wie das auf der anderen Seite die Datei öffnet, kann man nicht immer und überall bestimmen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#3

Re: Datei bereits in Benutzung

  Alt 26. Mär 2009, 14:12
PC (X) greift so auf die Datei zu:

Stream := TFileStream.Create(DateiName, fmOpenRead or fmShareExclusive); Dieser Source ist in einer überladenen Funktion von MemoryStream.LoadFromFile.
Die "normale" LoadFromFile vom Memorystream macht ja nix anderes außer anstatt fmShareExclsuive -> fmShareDenyNone zu nutzen.

Der PC (Y), wo die Datei liegt greift so auf die Datei zu:

TmpStream := TFileStream.Create (DateiName, fmOpenReadWrite or fmShareDenyNone); Und da liegt das Problem.
Wenn PC (Y) auf die Datei zugreifen will aber diese noch durch fmShareExclusive von PC (X) blockiert ist, dann kommt die Exception beim TFileStream.Create erst ca. 40sek nach Aufruf von .Create

Viele Grüße
Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Datei bereits in Benutzung

  Alt 26. Mär 2009, 14:26
neee, ich meinte wie das mit der Freigabe der Dateien aussieht ... es gibt ja verschiedene Varianten, wie Dateien eines anderen Rechneres in dem PC zur Verfügung gestellt werden
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#5

Re: Datei bereits in Benutzung

  Alt 26. Mär 2009, 14:30
PC (X) hat eine Netzlaufwerksverknüpfung auf PC (Y) sein Verzeichnis, wo die Daten liegen.
Die Netzlaufwerksberechtigung liegt bei Vollberechtigung.

Viele Grüße
Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Datei bereits in Benutzung

  Alt 26. Mär 2009, 14:39
Hast du ein gemapptes Laufwerk (H:\) oder ne UNC-Notation(\\PCX\)
Versuch beides mal.
Was passiert wenn du über den Explorer auf die Datei zugreifst?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#7

Re: Datei bereits in Benutzung

  Alt 26. Mär 2009, 14:47
gemapptes Netzlaufwerk...
Explorer meldet sofort, dass die Datei bereits benutzt wird
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Datei bereits in Benutzung

  Alt 27. Mär 2009, 08:31
Gibts vllt ein extrem langes ReadTimeout?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#9

Re: Datei bereits in Benutzung

  Alt 27. Mär 2009, 08:46
Leider weiß ich nicht, ob es so eine Art TimeOut gibt.
Wenn ja, wäre dass die Lösung aber vielleicht kann das ja jemand hier bestätigen bzw. verwerfen.

Viele Grüße
Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
27. Mär 2009, 09:22
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage
Antwort Antwort
Seite 1 von 2  1 2      


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:17 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