2017-04-02 51 views
0

我有一個小問題。我有一個我正在開發的項目,需要兩個程序來讀/寫一些.txt文件。.txt文件是否已關閉?

的Python寫入一個.txt文件,C++從中讀取。 C++完成它需要做的事情,然後將自己的信息寫入Python必須閱讀的另一個.txt文件中。

我想知道的是我怎麼能檢查與C++ Python是否已經關閉打開同一個文件之前.txt文件,像Python仍可以寫的東西進去,反之亦然?

如果您需要了解這一難題的任何額外的信息,請隨時與我聯繫。

+3

添加最少的代碼來重現此操作。 –

+3

如果文本文件僅用於在兩個進程之間傳遞消息,那麼可能會更容易完全跳過該文件並直接進行通信?我知道Python可以調用C++使用'ctypes'模塊... – Kevin

+0

使用IPC ........ –

回答

1

時,在Python中,你使用:

f.open() 

總是

f.close() 

,那麼你知道跟着它的關閉

見:

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

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

回覆:發表評論

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?

雖然哈克,我認爲通過閱讀後我最喜歡的是這一個:

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

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

+1

好吧,但是C++程序如何知道Python程序何時調用了「open」,並且「close」還沒有被調用? – Kevin

+1

@Kevin一個變量,也許是一個bool,可能會用於跟蹤打開和關閉,如果您正在執行這些程序之間,也許可以使用另一個文件或本地Internet在兩者之間創建連接連接,也許你可以讓一個程序寫入其他輸入文件描述符。我相信有更好的辦法,雖然 – chbchb55

-1

使用with open()方法始終關閉文件進行操作以後。請參閱Input and Output documentation中的第7.2節。

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

完成上述操作後,文件關閉。

+0

這不是問題的問題。 –

+0

問題在技術上要求C++解決方案來確定源文件是否已關閉。上述解決方案是一種確保文件操作在C++解讀文件之前完成的方法。 OP詢問了如何在打開Python文件之前知道它是否關閉。如果發佈的操作已完成,並且'with open()'方法已退出,則文件將關閉並準備好打開並閱讀。 – pstatix

0

你可能會考慮讓每一個「作家」的過程輸出寫入到一個臨時文件,關閉文件,然後將其重命名爲「讀者」的過程中尋找的文件名。

如果文件存在,則相應的讀取器進程知道它可以從它讀出。