【发布时间】:2013-08-30 21:28:12
【问题描述】:
在 UNIX 中,如果我以附加模式打开文件,例如
fd = open("filename", O_APPEND);
然后给定这样一个文件描述符,我们可以很容易地找出使用fcntl打开它的标志:
fcntl(fd, F_GETFL) & O_APPEND
我知道fcntl 在 Windows 上不可用,但我想知道是否有某种方法可以确定这一点。 Windows 确实支持附加模式,例如在使用 CreateFile 创建文件并传入 FILE_APPEND_DATA 标志时。
但是,如果我只有一个已打开文件的句柄,那么我终其一生都无法找到一种方法来确定首次打开文件时请求的访问权限。 This question 提供了检查对特定文件的访问权限的基本方法,但这似乎无济于事。我试过了,即使我以只读模式打开一个文件,它仍然告诉我我有FILE_APPEND_DATA access 到该文件,如果我要请求它。换句话说,这个方法只告诉我进程对特定文件的访问权限(继承自启动进程的用户)。它没有说明打开文件时请求的确切访问权限。
这与 Windows 如何跟踪文件是否应仅附加到无关。正是后一个问题,我在任何地方都找不到答案。我发现的最接近的东西是GetFileInformationByHandleEx,但在梳理完文档后,没有一个文件属性可以通过该 API 返回建议“附加模式”。
更新:为了更好地澄清我的问题,这个问题实际上只适用于 MS VC 运行时库——使用类似 POSIX 的函数 _open 打开并使用 @987654331 写入的文件@ 之类的。似乎本机 win32 文件句柄没有“附加模式”的概念。
【问题讨论】:
标签: winforms file winapi msvcrt