gpt4 book ai didi

c - 终止进程时是否可以删除文件?

转载 作者:可可西里 更新时间:2023-11-01 09:53:29 26 4
gpt4 key购买 nike

我需要编写一个创建文件的 Windows C 应用程序,并且在应用程序终止时需要删除该文件(无论是在正常终止还是强制终止的情况下)。

另一个要求是用户还应该能够以只读模式打开此文件(可能使用记事本)。基本上这将在 Java 中读取(即 DocumentBuilder::parse)

我写了下面的代码

   HANDLE hFile = CreateFile("d:\\test.xml",                
GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
CREATE_ALWAYS,
FILE_FLAG_DELETE_ON_CLOSE,
NULL);

当我在 Notepad.exe 中打开文件(即 test.xml)时,我收到一条错误消息“该进程无法访问该文件,因为它正被另一个进程使用”。

但是,下面的代码可以正常工作

   HANDLE hFile = CreateFile("d:\\test.xml",                
GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);

但问题是,它不会删除文件(即当应用程序被终止时)。

感谢任何帮助。

如果您能提出一种既适用于 Windows 又适用于 Unix 的方法,那就太好了(例如使用 boost 库)。

最佳答案

documentation说:

The file is to be deleted immediately after all of its handles are closed, which includes the specified handle and any other open or duplicated handles.

If there are existing open handles to a file, the call fails unless they were all opened with the FILE_SHARE_DELETE share mode.

Subsequent open requests for the file fail, unless the FILE_SHARE_DELETE share mode is specified.

因此,您需要安排 FILE_SHARE_DELETE 由打开文件的任何进程传递。

关于c - 终止进程时是否可以删除文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24448457/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com