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

标签 c windows file-io

我需要编写一个创建文件的 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/

相关文章:

c - zlib 的 CloudFlare 分支是否仅针对 amd 进行了优化?

android - 方法 'GetArrayLength'/'GetByteArrayRegion' 无法在 JNI C 文件中解析

c++ - char 变量是否总是表示为取消引用的 char*[2] 和 {'x' ,\0}?

我可以使用 GCC 编译一个自动要求管理员权限的 C 程序吗?

java - 删除使用 FileOutputStream 创建的文件

c++ - 如何从文件中读取多个表达式?

c++ - 无法通过 open() 创建的文件授予其他人对我的写入权限

c - 我该如何解决这个错误? (未定义对 'display_menu' 的引用)

python - PackageNotInstalledError : Package is not installed in prefix

从 XP 切换到 WIN2K 时出现 Java 异常