为什么';t打开/写入/关闭路径为“的文件”;C:/filename";W7中的返回失败?

为什么';t打开/写入/关闭路径为“的文件”;C:/filename";W7中的返回失败?,c,winapi,C,Winapi,我有一个支持多年的win32程序。我刚刚注意到,在W7上,如果它试图直接在C:/中打开/写入/关闭一个文件,系统调用不会抱怨,但不会创建该文件。我确信这与W7的安全性有关,但是系统不应该调用返回-1来让程序知道它不会工作吗? 情况变得更糟。。。当我意识到系统调用没有失败后,我想我应该在close()之后测试文件是否存在,但这甚至成功了!该文件不会显示在资源管理器中,但stat(c:/filename)表示它在那里。 此路径由程序用户设置,因此,如果我尝试的每个系统调用都告诉我文件操作成功,那么如

我有一个支持多年的win32程序。我刚刚注意到,在W7上,如果它试图直接在C:/中打开/写入/关闭一个文件,系统调用不会抱怨,但不会创建该文件。我确信这与W7的安全性有关,但是系统不应该调用返回-1来让程序知道它不会工作吗? 情况变得更糟。。。当我意识到系统调用没有失败后,我想我应该在close()之后测试文件是否存在,但这甚至成功了!该文件不会显示在资源管理器中,但stat(c:/filename)表示它在那里。
此路径由程序用户设置,因此,如果我尝试的每个系统调用都告诉我文件操作成功,那么如何检测文件操作是否成功?

访问被重定向到私人文件夹


这是一个兼容性功能,允许程序假装对
Windows
目录和系统驱动器根目录进行写访问,而不会影响系统。

我想你会发现系统调用确实存在问题。这些天的默认权限是拒绝在系统根目录中创建文件。正确检查返回值和错误代码。如果希望调用失败,我认为需要给程序一个清单,声明它与Windows Vista兼容。根据我链接的演示文稿,它是兼容的,这是有意义的,由于许多已损坏的应用程序使用系统根文件夹来避免解析
程序文件中的空间
。对于C:\和C:\ windows,都会发生相同的情况:打开/写入/关闭/统计都会正常成功,即使文件未在其中创建。我发现(自从发布后)access()(代替stat())会告诉我文件不存在。这个问题似乎讨论了同样的问题: