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.
Wird die Datei von einem anderen Prozess zur gleichen Zeit geschrieben/zugegriffen? – Baldrick
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
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