【问题标题】:Has .txt file been closed?.txt 文件是否已关闭?
【发布时间】:2017-04-02 13:50:48
【问题描述】:

我有一个小问题。我有一个正在处理的项目,需要两个程序来读/写一些 .txt 文件。

Python 写入一个 .txt 文件,C++ 从中读取。 C++ 做它需要做的事情,然后将它自己的信息写入另一个 Python 必须读取的 .txt 文件。

我想知道的是,如果 Python 在打开同一个文件之前关闭了 .txt 文件,我该如何检查 C++,因为 Python 可能仍在向其中写入内容,反之亦然?

如果您需要有关此难题的任何其他信息,请随时与我联系。

【问题讨论】:

  • 添加一个最小的代码来重现这个。
  • 如果文本文件的存在只是为了在两个进程之间传递消息,也许完全跳过文件直接通信会更容易?我知道 Python 可以使用 ctypes 模块调用 C++ 函数...
  • 使用IPC........
  • 您可以尝试在每次要写入文件时锁定文件。据我所知,在 CPP 中,您可以使用 flock。在 python 中你可以使用filelock 模块。

标签: python c++


【解决方案1】:

无论何时,在 python 中,你使用:

f.open()

总是跟着它

f.close()

那你就知道它关门了

见:

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

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

回复:评论

预计到达时间

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

【讨论】:

  • 好的,但是C++程序如何知道open已经被Python程序调用,而close还没有被调用?
  • @Kevin 一个变量,可能是一个布尔值,可能用于跟踪打开和关闭,如果您在程序之间执行此操作,也许您可​​以使用例如创建两者之间的连接,另一个文件或本地互联网连接,也许您可​​以让一个程序写入其他输入文件描述符。我敢肯定还有更好的方法
【解决方案2】:

您可以考虑让每个“写入器”进程将其输出写入临时文件,关闭文件,然后将其重命名为“读取器”进程正在查找的文件名。

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

【讨论】:

    【解决方案3】:

    使用with open() 方法总是在执行操作后关闭文件。请参阅Input and Output documentation 中的第 7.2 节。

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

    以上完成后,文件关闭。

    【讨论】:

    • 这不是问题要问的。
    • 问题技术上要求提供 C++ 解决方案来确定源文件是否已关闭。上述解决方案是一种确保文件操作在 C++ 解决方案读取文件之前完成的方法。 OP 询问如何在打开 Python 文件之前知道它是否已关闭。如果发布的操作已完成并且 'with open()' 方法已退出,则文件将关闭并准备好打开和读取。
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 2018-09-06
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多