2017-04-02 122 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

你可能会考虑让每一个“作家”的过程输出写入到一个临时文件,关闭文件,然后将其重命名为“读者”的过程中寻找的文件名。

如果文件存在,则相应的读取器进程知道它可以从它读出。