2016-06-23 3 views
0

Eine interne Anwendung in unserer Firma erfordert Dateien aa, bb ... zz in Ordner X beim Start gelesen werden. Wenn ich (als jemand mit FullControl-Zugriff auf Ordner X) die App starte, geht alles gut. Wenn einige meiner Kollegen (die nur Lesezugriff auf Ordner X haben) die App starten, erhalten sie die Ausnahme "Zugriff verweigert auf Datei ...".Anwendung kann Datei nicht zugreifen, obwohl ich es kopieren kann Explorer

Die Dateien werden durch die folgende Routine

 public static void readFromBinaryFile(this QIHasFileIo xThis, string xFilePath) 
     { 
      if (!System.IO.File.Exists(xFilePath)) 
       throw new System.Exception("File to read " + xFilePath + " does not exist ... "); 

      if (xThis == null) 
       throw new NullReferenceException("xThis cannot be null, as it is a readonly reference ... "); 

      using (BinaryReader xReader = new BinaryReader(new FileStream(xFilePath, FileMode.Open, FileAccess.Read))) 
       xThis.readObject(xReader); 
     } 

das heißt ich bin Angabe des Lesemodus, lesen die wiederum sollte benötigen nur Zugriff auf den Ordner lesen. Wenn meine Kollegen im Explorer zum Ordner X wechseln, können sie die Dateien aa, bb, ... auf ihre Desktops kopieren, was bedeutet, dass sie Lesezugriff auf die Dateien haben.

So bin ich fasziniert. Dieses seltsame Verhalten begann vor ein paar Tagen mit Änderungen am Datenserver. Die bemerkenswertesten Änderungen waren, dass 1/meine Kollegen keine Administratorrechte mehr auf dem Datenserver hatten 2/einige Gruppenrichtlinienobjekte wurden möglicherweise durcheinander gebracht (dies geschah zuvor im Unternehmen). Die IT-Abteilung ist auch verblüfft, also habe ich keine Ahnung, wie es weitergeht.

Jeder Hinweis ist sehr geschätzt, Daniel

Edit: Ein bereits gelöschter Beitrag vorgeschlagen FileShare.ReadWrite verwenden. Ich bin dem Autor dankbar für den Kommentar, aber die Datei hat garantiert keine Schreibsperre. Daher ist der why File.copy works but File.OpenRead prompts access denied? Thread hier nicht relevant.

+0

Wird die Datei von einem anderen Prozess zur gleichen Zeit geschrieben/zugegriffen? – Baldrick

+0

Wenn dies der Fall ist, müssen Sie 'FileShare.ReadWrite' zu ​​den Parametern hinzufügen, die an den' FileStream'-Konstruktor übergeben werden. Dies verhindert, dass es versucht, eine exklusive Lesesperre zu erhalten. – Baldrick

+0

Mögliches Duplikat von [Warum File.copy funktioniert, aber File.OpenRead fordert Zugriff verweigert?] (Http://stackoverflow.com/questions/28087927/why-file-copy-works-but-file-openread-prompts-access- abgelehnt) – Baldrick

Antwort

1

Sie müssen FileShare.ReadWrite zu den Parametern hinzufügen, die an den FileStream-Konstruktor übergeben werden.

Dies verhindert, dass die Anwendung versucht, eine exklusive Lesesperre zu erhalten, die unter bestimmten Bedingungen nicht möglich ist, wenn eine gemeinsame Lese-/Schreibsperre möglich ist (z. B. wenn die Datei von einem anderen Prozess geschrieben wird).

1

Ich hatte ähnliches Problem beim Lesen einer Datei. Das Problem war mit der Zugriffsebene für die ActiveDirectory-Gruppe für die bestimmte Gruppe (Lesergruppe) von Benutzern wurde nicht richtig eingerichtet. Ich bin mir nicht sicher, ob Sie die AD-Gruppenauthentifizierung auf dem Server verwenden. Ich würde Ihnen empfehlen, die Art des Zugriffs und die Gruppen Ihrer Kollegen zu überprüfen. Außerdem müssen Sie überprüfen, wie Ihre Anwendung die Benutzer derzeit authentifiziert, um auf das Verzeichnis zuzugreifen.

+0

Danke.Gegenwärtig hat die App per se keine Authentifizierung (wir sind eine kleine Firma), daher greift die App auf die Dateien mit den Windows-Login-Informationen zu. Wie für die Gruppe ... können Sie sich bitte mehr erinnern, ein Schlüsselwort oder etwas, so dass ich unserer IT einen Hinweis geben kann? Danke vielmals. –

+0

Danke für die Details. Wie Sie erwähnt haben, dass Sie Windows-Login verwenden, haben Sie Test durch Treffer und Testmethode Nur vorschlagen Sie wenige Möglichkeiten- 1. Überprüfen Sie, ob das Verzeichnis (oder die bestimmte Datei) manuell vom Benutzer zugegriffen werden kann. 2. Versuchen Sie, einem Benutzer vollen Zugriff zu gewähren und testen Sie es. 3. Versuchen Sie, einen anderen Dateifreigabepfad außerhalb des aktuellen Verzeichnisses zu erstellen, in dem der Benutzer ordnungsgemäß auf die Dateien zugreifen kann –

Verwandte Themen