【问题标题】:Can I queue a delete on a file?我可以排队删除文件吗?
【发布时间】:2013-11-30 00:35:21
【问题描述】:

我在内存中有代表图像的数据。我想在默认程序中打开图像以打开图像。因此,我创建了一个临时文件,将数据写入其中,然后使用默认应用程序打开该文件。目前,我正在使用 Qt 通过QDesktopServices::openUrl ( const QUrl & url ) 完成最后一步。问题是我现在在磁盘上有这个随机文件。有没有一种方法可以让我对文件进行删除排队,以便在应用关闭后将其删除?

就操作系统而言,我更喜欢独立于操作系统的解决方案,但我猜可能不存在。因此,如果您可以链接到/发布如何在 linux/osx/windows 中执行此操作,那将非常有帮助。

【问题讨论】:

  • 您的程序需要在默认应用程序显示文件期间处于活动状态吗?如果没有,请等待外部程序结束并删除文件。
  • @Babblo 我想到了,问题是我不知道使用什么应用程序打开文件。此外,即使我知道应用程序的名称是什么,也可能有不止一个实例,我也不知道它是哪个。
  • 我对 QT 了解不多,但我很确定会有一些方法来启动外部进程并等待它完成。
  • 在 Posix 上,尝试mkstemp
  • @chacham15 我很久以前就这样做了,所以细节非常模糊,但是您绝对可以打开一个文档并等待相关进程停止。 IIRC 我当时使用 WinAPI ShellExecuteEx 做到了这一点,但如果其他操作系统不提供相同的服务,我会感到非常惊讶。但是我不确定 Qt 是否提供了相应的跨平台抽象,因此您可能必须编写平台相关代码 (#ifdefs)。

标签: c++ c qt


【解决方案1】:

在 POSIX 系统(任何 Unix 或 Linux 机器)上,您可以利用一个很好的技巧:您可以在打开文件后使用 unlink 删除文件的目录条目。只要你在文件上保留一个打开的文件句柄,它就不会被删除,但是一旦你关闭它,文件系统会自动回收存储。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多