Zugriff auf geöffnete Datei wirft Exception



  • Hallo!
    Mein C#-Programm hat eine Datei zum Schreiben geöffnet:

    StreamWriter prot_file;
    prot_file = new StreamWriter(new FileStream(filename, FileMode.Append, FileAccess.Write, FileShare.Read));
    

    Das ist ein Textfile, an das im Sekundentakt eine neue Zeile angefügt wird. Dazu habe ich diese Methode geschrieben (stark verkürzt):

    private void write_entry(StreamWriter sw)
    {
        sw.WriteLine(data);
    }
    

    Ich lasse mein kleines Progrämmchen laufen und es funktioniert wunderbar. Ich kann die ständig wachsende Textdatei auch in einem Texteditor öffnen (wie gewünscht durch FileShare.Read).
    Öffne ich die Datei mit Excel, sagt mir Excel auch, dass die Datei derzeit von einem anderen Benutzer gesperrt ist und daher nur schreibgeschützt geöffnet werden kann. Sage ich nun Excel, dass es die Datei schreibgeschützt öffnen soll, da ich eh nur lesen darauf zugreifen möchte, wirft mein C#-Programm dann eine IOException:

    System.IO.IOException: Der Prozess kann nicht auf die Datei zugreifen, da ein anderer Prozess einen Teil der Datei gesperrt hat

    Die Frage ist, warum? 🙂
    Wieso kann mir Excel die Zugriffsrechte klauen, trotz FileShare.Read?



  • "Opens the file if it exists and seeks to the end of the file, or creates a new file. This operation requires FileIOPermissionAccess.Append permission. FileMode.Append can be used only in conjunction with FileAccess.Write. Trying to seek to a position before the end of the file throws an IOException exception, and any attempt to read fails and throws an NotSupportedException exception."

    Ist was msdn dazu sagt.
    Also somit, eine Exception sollte also geworfen werden wenn probiert wird zu lesen, allerdings nicht die die du hast^^.

    Probiers mal mit FileMode.OpenOrCreate.



  • Hi JCarlson!

    Danke für Deine Antwort!

    .....
    Ist was msdn dazu sagt.
    Also somit, eine Exception sollte also geworfen werden wenn probiert wird zu lesen, allerdings nicht die die du hast^^.

    Probiers mal mit FileMode.OpenOrCreate.

    Die Exception sollte aber nicht bei meinem Programm auftreten, sondern höchstens bei Excel. Mein Programm liest nicht aus der Datei, es gibt nur Schreibzugriffe.
    Verwende ich FileMode.OpenOrCreate, wie Du vorgeschlagen hast, wird leider weiterhin die Exception geworfen.


Anmelden zum Antworten