删除使用临时文件创建的锁定文件



我有一个GUI(lxn/walk)应用程序补丁程序,它通过ftp下载文件,将其流式传输到临时文件并提取内容以更新本地文件。删除文件命令将延迟。

除非用户在下载文件时退出程序,否则不会删除文件,否则这有效。

我试图通过捕获信号并删除那里的文件来优雅地退出来解决此问题。但不幸的是,它抛出了一个错误,即无法删除该文件,因为它正被另一个程序使用。这是有道理的,因为另一个程序实际上本身仍在写入临时文件。

现在我被困住了,不知道该怎么做才能确保一旦补丁程序未运行,临时文件就会自动消失。我该如何正确执行此操作?

该文件也可以创建为普通文件,而不仅仅是临时文件。我也想问一下,在窗口中哪里最好写临时文件?

现在我被困住了,不知道该怎么做才能确保一旦补丁程序未运行,临时文件就会自动消失。我该如何正确执行此操作?

没有保证的方法可以完成此操作,因为应用程序无法控制的许多事情都可能导致它退出。由于某些硬件问题导致的电源故障或内核崩溃可能会导致计算机崩溃或强制重新启动。

常用的策略是在程序启动时对上一次运行的状态进行检查。某些应用程序在启动时创建锁定文件,并在正常退出时将其删除。如果重新启动程序时此锁定文件存在,则意味着以前的运行不会导致干净退出,并且应用程序可以采取任何纠正措施。要采取的确切操作取决于应用程序的性质,有些拒绝启动,有些则向用户发出警告。

我也想问一下,在窗口中哪里最好写临时文件?

每个操作系统都有自己的临时文件位置。如果消除dir参数以TempFile,它将在适当的位置创建它,如文档中所述:

TempFile目录目录中创建一个新的临时文件,打开 文件进行读取和写入,并返回生成的*os.File。这 文件名是通过采用模式并将随机字符串添加到 结束。如果模式包含"*",则随机字符串将替换 最后"*".如果 dir 是空字符串,则TempFile使用默认值 临时文件的目录(请参见os.TempDir)。多个程序 同时调用TempFile不会选择同一个文件。这 调用方可以使用f.Name()查找文件的路径名。它是 调用方有责任在不再需要时删除文件。

os.TempDir我们看到以下内容:

在 Unix 系统上,如果为非空,则返回$TMPDIR,否则返回/tmp。上 Windows,它使用GetTempPath,返回第一个非空值 从%TMP%%TEMP%%USERPROFILE%或 Windows 目录。上 计划9,它返回/tmp

该目录既不保证存在,也无法访问 权限。

最新更新