Winapi 为什么CreateFile不能在64位程序中打开以点结尾的文件?

Winapi 为什么CreateFile不能在64位程序中打开以点结尾的文件?,winapi,filenames,createfile,Winapi,Filenames,Createfile,Windows CreateFile的行为有一个奇怪的差异,这取决于您是将程序编译为32位还是64位。前者将愉快地打开以点周期结束的文件,而后者则失败,错误为“访问被拒绝” 例如,以下程序将根据位的不同而有所不同: int _tmain(int argc, _TCHAR* argv[]) { HANDLE h = CreateFile( _T("\\bob."), GENERIC_WRITE, FILE_SHARE_READ | FILE_

Windows CreateFile的行为有一个奇怪的差异,这取决于您是将程序编译为32位还是64位。前者将愉快地打开以点周期结束的文件,而后者则失败,错误为“访问被拒绝”

例如,以下程序将根据位的不同而有所不同:

int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE h = CreateFile(
        _T("\\bob."),
        GENERIC_WRITE,
        FILE_SHARE_READ | FILE_SHARE_WRITE,
        NULL,
        CREATE_ALWAYS,
        FILE_ATTRIBUTE_NORMAL,
        NULL);
    return h != INVALID_HANDLE_VALUE;
}

我是做错了什么还是Windows的错误?Windows 7,如果有区别的话。

如果你想知道我为什么要打开这样的文件名,那是因为tmpnam返回了它们。你确定这不仅仅是权限问题吗?如果您当前的驱动器是C:\这将尝试创建C:\ bob,默认权限将阻止在C:\@JonathanPotter的根目录中创建文件,我认为您是对的。32位版本在AppData\Local\VirtualStore中创建文件,这表明我试图在UAC不允许的地方创建文件。我想问题是为什么64位版本不也是这样呢?另外,for-tmpnam说,如果它返回一个带有反斜杠前缀的路径,那么它对当前工作目录有效。也许我必须检查这个反斜杠,如果有,在工作目录路径前面加上前缀。