2017-04-02 1 views
0

Ich habe ein kleines Problem. Ich habe ein Projekt, an dem ich arbeite, und das erfordert zwei Programme zum Lesen/Schreiben in einige TXT-Dateien.Wurde die .txt-Datei geschlossen?

Python schreibt in eine TXT-Datei, liest C++ daraus. C++ tut, was es tun muss, und schreibt dann seine eigenen Informationen in eine andere .txt-Datei, die Python lesen muss. Ich möchte wissen, wie kann ich mit C++ überprüfen, wenn Python die TXT-Datei vor dem Öffnen der gleichen Datei geschlossen hat, wie Python noch Sachen hinein schreiben und umgekehrt?

Wenn Sie zusätzliche Informationen über dieses Rätsel benötigen, zögern Sie nicht mich zu kontaktieren.

+3

Fügen Sie einen minimalen Code hinzu, um dies zu reproduzieren. –

+3

Wenn die Textdatei nur zum Übergeben von Nachrichten zwischen den beiden Prozessen existiert, ist es vielleicht einfacher, die Datei vollständig zu überspringen und direkt zu kommunizieren. Ich weiß Python kann C++ Funktionen mit dem 'ctypes' Modul aufrufen ... – Kevin

+0

IPC verwenden ........ –

Antwort

1

wann immer, in Python, die Sie verwenden:

f.open() 

immer folgen sie mit

f.close() 

dann seine wissen Sie

geschlossen

siehe:

https://docs.python.org/2/tutorial/inputoutput.html

https://www.tutorialspoint.com/python/file_close.htm

re: Kommentar

ETA

How to check if a file has been opened by another application in C++?

Is there a way to check if a file is in use?

C/C++ Standard Function to Check if a file is used by another process?

Way to check in C/C++ if a file is in use?

wenn auch Hacky, ich glaube, mein Favorit, nachdem sie durch das Lesen dieses war:

if ( 0 != rename("c:/foo.txt", "c:/foo.txt") ) { 
    printf("already opened\n"); 
    } 

https://stackoverflow.com/a/1048721/3680588

+1

Ok, aber wie weiß das C++ Programm, wenn 'open' vom Python-Programm aufgerufen wurde und' close' noch nicht aufgerufen wurde? – Kevin

+1

@Kevin eine Variable, vielleicht eine Bool, würde wahrscheinlich verwendet werden, um zu überwachen, öffnen und schließen, wenn Sie dies zwischen den Programmen tun, können Sie vielleicht eine Verbindung zwischen den beiden mit Hilfe zum Beispiel eine andere Datei oder ein lokales Internet erstellen Verbindung, vielleicht könnte man ein Programm schreiben, um den anderen Eingabedateideskriptor zu schreiben. Ich bin sicher, es gibt bessere Möglichkeiten, aber – chbchb55

-1

Mit dem with open() Methode immer schließt die Datei nach Operationen ausgeführt werden. Siehe Abschnitt 7.2 in der Input and Output documentation.

with open(in_file, 'w') as f: 
    content = 'Example text' 
    f.write(content) 

Sobald das oben genannte abgeschlossen ist, wird die Datei geschlossen.

+0

Das ist nicht, was die Frage fragt. –

+0

Frage technisch nach einer C++ - Lösung gefragt, um festzustellen, ob die Quelldatei geschlossen wurde. Die obige Lösung ist eine Methode, um sicherzustellen, dass die Dateioperationen vor dem Lesen der Datei durch C++ durchgeführt werden. OP fragt, wie man vor dem Öffnen der Python-Datei feststellen kann, ob sie geschlossen ist. Wenn die geposteten Vorgänge abgeschlossen sind und die Methode 'with open()' beendet wurde, wird die Datei geschlossen und kann geöffnet und gelesen werden. – pstatix

0

Sie könnten erwägen, jeden "Schreiber" -Prozess seine Ausgabe in eine temporäre Datei schreiben zu lassen, die Datei zu schließen und sie dann in den Dateinamen umzubenennen, nach dem der "Leser" -Prozess sucht.

Wenn die Datei vorhanden ist, dann weiß der jeweilige Leserprozess, dass er daraus lesen kann.

Verwandte Themen