在系统驱动器中创建文件时,fopen无形地失败(C:\)

时间:2011-01-18 20:22:15

标签: c++ c windows fopen

每当我尝试使用fopen创建文件时,fopen就像文件已正确打开并且它具有完全访问权限一样,但它实际上并不创建文件。我的程序没有对系统根文件夹的写访问权限,因为它需要管理员访问才能在那里写入,但为什么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
}

编辑:正如rerun指出的那样,由于virtualization,该文件是在%APPDATA%中创建的。有谁知道如何禁用此功能?

3 个答案:

答案 0 :(得分:6)

这可能与虚拟商店有关。看看here了解一些信息。

答案 1 :(得分:3)

如果您确实在运行您发布的代码,那么您根本不需要根目录中的文件。您需要转到"c:\\filename.txt"(两个'\'字符)。也许如果你查看当前目录,你会发现你已经成功创建了一个奇怪命名的文件(基本上<formfeed>ilename.txt,我认为)。

答案 2 :(得分:2)

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

我们的解决方案是属性 - >链接器 - &gt;清单文件 - &gt; UAC执行级别 - &gt; requireAdministrator 即可。恕我直言,它也适合你的情况。