Schließen und Freigeben einer datei innerhalb eines Threads



  • Hallo,

    ich hoffe ich bin mit meinem Beitrag im richtigen Unterforum gelandet.
    Außerdem möchte ich mich schonmal vorab entschuldigen, dass ich keinen kompilierbaren code poste..leider ist es mir bisher nicht gelungen ein reduziertes Code-Beispiel zu erstellen, welches mein Problem reproduziert.
    Daher erwarte ich als Antworten auch keine Lösungen in Code-Form, sondern eher Denkanstöße, wie ich mein Problem lösen könnte.

    Nun zur Beschreibung meines Problems: Und zwar habe ich ein ziemlich komplexes Programm gegeben, welches auch mit einem Thread arbeitet. Meine Aufgabe besteht nur darin, vor Aufruf eines Threads zu prüfen, ob eine Excel- Datei schreibend geöffnet ist. Wenn nicht, soll das Programm dies tun und damit für weitere schreibende Aufrufe anderer Programme
    blockieren. Diese Funktionalität setze ich mit

    FILE *Testpath;
    while((Testpath = fopen(path, "a"))==NULL)
    

    um. "path" enthält dabei den Dateinamen einschließlich Pfad. Dies funktioniert auch.

    Nach Durchlaufen des Threads, dieser wird mit

    m_hSimulationThread = (HANDLE)_beginthread(ThreadStub, 0, &theSimulation );
    

    aufgerufen, soll die Datei wieder für andere Programme freigegeben werden.
    Die Freigabe sollte mit "fclose(Testpath) erfolgen. Mein Problem ist nun, dass diese Freigabe innerhalb des Threads nicht funktioniert. Es kommen keine Kompilierfehler, durch debuggen weiß ich auch, dass
    "fclose(Testpath)" auch ausgeführt wird, das für den Schreibzugriff verantwortliche Flag wird auch zurückgesetzt. Trotzdem bekomme ich dann beim Öffnen der Datei mit Excel die Fehlermeldung, dass die Datei gerade von einem anderen user geöffnet ist, also die Datei nur lesend geöffnet werden kann. ich konnte das Problem auf genau diesen Thread eingrenzen, in allen anderen Funktionen/Programmabschnitten, die mein Code noch enthält, funktioniert die Freigabe.

    ich bin mittlerweile relativ ratlos, habe schon ziemlich viel recherchiert, aber ich finde keine Lösung. Mit Threads habe ich vorher noch nie gearbeitet, aber eigentlich muss ich mit diesem ja nichts machen.

    Vielleicht habt ihr ja Tipps oder Hinweise, wie ich das Problem in den Griff bekommen könnte.

    Vielen Dank für alle Antworten,
    Grüße,
    Gregor



  • Dieser Thread wurde von Moderator/in Arcoth aus dem Forum C++ (alle ISO-Standards) in das Forum C (alle ISO-Standards) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hast Du die Datei vor deinem fopen(path, "a") schon einmal zum Schreiben geöffnet? Dann muß auch dieser Stream geschlossen werden.



  • Bist Du unter Win unterwegs?
    Halte mal nebenzu den ProcessExplorer aus den Sysinternals offen, der zeigt Dir, wer wann die Hand auf die Datei hält. Ist gelegentlich hilfreich.


Log in to reply