Laden...

UnauthorizedAccessException beim Öffnen bestimmten Dateien

Erstellt von KRambo vor 9 Jahren Letzter Beitrag vor 9 Jahren 2.366 Views
K
KRambo Themenstarter:in
355 Beiträge seit 2004
vor 9 Jahren
UnauthorizedAccessException beim Öffnen bestimmten Dateien

Hallo Leute

Ich hab ein Problem und hoffe jemand von euch kann mir auf die richtige Spur helfen. Ich habe folgende Funktion, um für einen FileSystemWatcher zu prüfen ob eine Datei gesperrt ist

public bool IsFileLocked(string filePath, int secondsToWait)
{
    bool isLocked = true;
    int i = 0;

    while (isLocked && ((i < secondsToWait) || (secondsToWait == 0)))
    {
        try
        {
            using (File.Open(filePath, FileMode.Open)){ }
            return true;
        }
        catch (IOException e)
        {
            var errorCode = Marshal.GetHRForException(e) & ((1 << 16) - 1);
            isLocked = errorCode == 32 || errorCode == 33;
            i++;

            if (secondsToWait != 0)
                new System.Threading.ManualResetEvent(false).WaitOne(1000);
        }
    }

    return isLocked;
}

Das ganze funktioniert problemlos, solange die Dateinamen das Namensschema "Datei.xyz" besitzen. Ich sollte aber auch Dateien auf Sperrungen prüfen können, die das Namensschema "Datei.xyz.xyz" besitzen. Das heißt eine solche Datei heißt etwa "941018.ipt.dwfx"

Und genau hier ist das Problem: sobald die Datei eine zweite Endung hat erhalte ich bei File.Open einen Fehler> Fehlermeldung:

Eine Ausnahme (erste Chance) des Typs "System.UnauthorizedAccessException" ist in mscorlib.dll aufgetreten.

Es hat definitiv mit dem Dateinamen zu tun und ich finde dafür einfach keine Lösung. Ich habe den Code auch schon geändert

using (FileStream stream = new FileInfo(filePath).OpenWrite()) { }

Das Problem bleibt bestehen 🙁 auch mit der API Funktion CreateFile funktioniert es mit diesen Dateien nicht. Gibts doch nicht dass ich der einzige mit diesem Problem bin 😭

Bin für alle Vorschläge offen 👍

1.696 Beiträge seit 2006
vor 9 Jahren

Hallo,

der Exception nach hat es mit Rechten zu tun, prüfe also ob der ausführende User genügend Rechte hat, die Datei zu lesen.

Grüße

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

K
KRambo Themenstarter:in
355 Beiträge seit 2004
vor 9 Jahren

Danke, oh mann bin ich blöd. Die Datei hatte "schreibgeschützt" hinterlegt, daher die Exception. Habe stundenlang rumgesucht und probiert und bin da nicht draufgekommen, ab und zu ist man echt blind 😁

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo KRambo,

Es hat definitiv mit dem Dateinamen zu tun und ich finde dafür einfach keine Lösung.

vermutlich hat dir diese - definitiv falsche 😃 - Annahme bei der Lösung im Weg gestanden. Gerade wenn man keine Lösung findet, sollte man immer alle Annahmen, die man getroffen hat, sehr kritisch und gründlich überprüfen und mindestens testweise negieren. Nur weil ein Fehler nur bei Dateien mit bestimmten Namen auftritt, bedeutet das noch lange nicht, dass die Ursache des Fehlers in dem Dateinamen liegt. Es kann genauso gut sein - und so war es hier ja auch -, dass - zufällig oder absichtlich - alle Dateien mit bestimmten Namen auch bestimmte andere gemeinsame Eigenschaften haben. Und eben eine dieser anderen Eigenschaften die Ursache ist - hier eben der Schreibschutz.

Ich rolle das deshalb im Detail auf, weil an sich viel Aufwand und Ärger sparen kann, wenn man sich bei der Suche nach der Ursache nicht leichtfertig und fälschlich auf bestimmte Ursachen konzentriert bzw. andere Ursachen vorschnell und fälschlich ausschließt.

Beim Zusammentreffen bestimmter Faktoren (hier Dateiname und Schreibschutz) muss es nicht zwangsläufig einen ursächlichen Zusammenhang geben. Und auch wenn der Zusammenhang bei allen untersuchten Fällen auftrat, muss er nicht für alle möglichen/denkbaren Fälle gelten. Dessen sollte man sich bewusst sein oder spätestens werden, wenn man in einer Sackgasse gelandet ist.

herbivore

K
KRambo Themenstarter:in
355 Beiträge seit 2004
vor 9 Jahren

Da hast du auf jeden Fall Recht 😃
Danke für eure Hilfe!