在系统驱动器(C:\)中创build文件时,fopen不可见地失败

每当我尝试使用fopen创build一个文件时,fopen的行为就好像文件已经正确打开并且它具有完全访问权限,但实际上并不创build文件。 我的程序没有对系统根文件夹的写访问权限,因为它需要pipe理员访问权限才能在那里写入,但为什么不是fopen()给出了任何错误?

任何想法如何判断是否有错误? 当我试图打开受保护的目录中的文件时,返回的文件句柄与我在具有写入权限的目录中打开文件时完全相同。

我已经尝试过与各种不同版本的fopen(fopen,_wfopen,_wfopen_s),但他们都有相同的输出。

有趣的是,GetLastError()返回ERROR_ALREADY_EXISTS。

以下是我正在使用的代码:

FILE *FileHandle; DWORD error = _wfopen_s(&FileHandle, L"\\filename.txt", L"a"); Win32Error = GetLastError(); if (error != 0 || FileHandle == NULL) { //Throw error } else { //write to file //close file } 

编辑:如重新运行指出,该文件正在创build%APPDATA%由于虚拟化 。 有谁知道如何禁用此function?

Solutions Collecting From Web of "在系统驱动器(C:\)中创build文件时,fopen不可见地失败"

这可能与虚拟商店有关。 看看这里的一些信息。

如果你真的在运行你发布的代码,那么你根本就不需要在根目录下找一个文件。 你需要去"c:\\filename.txt" (两个“\”字符)。 也许如果你看看目前的目录,你会发现你已经成功地创建了一个奇怪的文件(基本上是<formfeed>ilename.txt ,我想)。

我们在注册表虚拟化方面也遇到过类似的问题,是的,它也是在Vista之后虚拟化的。

我们的解决方案是Properties-> Linker-> Manifest File-> UAC Execution Level-> requireAdministrator 。 恕我直言,它可能也适用于你的情况。