myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » UnauthorizedAccessException beim Öffnen bestimmten Dateien
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

UnauthorizedAccessException beim Öffnen bestimmten Dateien

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
KRambo KRambo ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.08.2004
Beiträge: 355
Entwicklungsumgebung: Visual Studio 2010


KRambo ist offline

UnauthorizedAccessException beim Öffnen bestimmten Dateien

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

C#-Code:
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

C#-Code:
using (FileStream stream = new FileInfo(filePath).OpenWrite()) { }

Das Problem bleibt bestehen unglücklich auch mit der API Funktion CreateFile funktioniert es mit diesen Dateien nicht. Gibts doch nicht dass ich der einzige mit diesem Problem bin traurig

Bin für alle Vorschläge offen Daumen hoch

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von KRambo am 18.12.2014 08:58.

18.12.2014 08:56 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
vbprogger vbprogger ist männlich
myCSharp.de-Poweruser/ Experte

avatar-1820.gif


Dabei seit: 16.01.2006
Beiträge: 1.694
Entwicklungsumgebung: Visual Studio 2012 Prof.
Herkunft: NRW/DE


vbprogger ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
18.12.2014 09:46 Beiträge des Benutzers | zu Buddylist hinzufügen
KRambo KRambo ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.08.2004
Beiträge: 355
Entwicklungsumgebung: Visual Studio 2010

Themenstarter Thema begonnen von KRambo

KRambo ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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 großes Grinsen

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von KRambo am 18.12.2014 10:00.

18.12.2014 09:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.478
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo KRambo,

Zitat:
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
18.12.2014 10:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
KRambo KRambo ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.08.2004
Beiträge: 355
Entwicklungsumgebung: Visual Studio 2010

Themenstarter Thema begonnen von KRambo

KRambo ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Da hast du auf jeden Fall Recht :)
Danke für eure Hilfe!
18.12.2014 11:49 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 5 Jahre.
Der letzte Beitrag ist älter als 5 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 10.08.2020 17:57