c++ - Windows 应用程序以非管理员身份运行时看到文件的旧版本而不是当前版本

标签 c++ file windows-7

我有一个用 Microsoft Visual Studio 2003 编译的 C++ 命令行程序,我在 Windows 7(64 位版本)下运行生成的 32 位可执行文件。大多数事情都能正常工作,除了一个莫名其妙的怪事。

启动时,我的程序尝试使用 ifstream 读取文本文件。如果我以管理员身份运行我的程序,通过打开管理员命令提示符,或在资源管理器中右键单击并选择“以管理员身份运行”,那么一切正常,我的程序读取文件的当前版本。

如果相反,我从正常的命令提示符运行,或者通过双击资源管理器,我的程序反而会看到昨天的文本文件的旧版本。即使我删除了该文件,我的程序仍然会愉快地打开该文件并读出旧内容。

如果我在非管理员模式下对文件运行 typenotepad,则会显示正确的最新版本,问题似乎仅限于我的程序。我已尝试在不做任何更改的情况下向我的用户授予该文件的所有可能权限。

一个可能的线索是,如果我从 Explorer 转到文本文件的 properties 并查看“Previous Versions”下的内容,会列出一个以前的版本,从昨天开始,它的内容与我的程序在尝试读取文件时看到的内容。

当我的程序不是以管理员身份运行时,我的程序似乎卡在了文件系统的旧 View 中,而是看到了这个以前的版本,我希望有人能向我解释为什么会发生这种情况以及(希望)如何修复

最佳答案

如果您没有为输入文件使用绝对路径名,那么您很可能读取了错误的文件(事实证明,您可以在删除文件后读取该文件)。换句话说,在您的系统某处有旧文件的另一个拷贝,这就是您的程序正在读取的内容。

微软的ProcMon工具(或较旧的 FileMon)可以显示您的应用程序正在访问哪个文件。

关于c++ - Windows 应用程序以非管理员身份运行时看到文件的旧版本而不是当前版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10921930/

相关文章:

c++ - 反转字符串中单词的字母

c++ - GCC 对 lambda 中的静态变量做了什么?

以字节为单位的 Java NegativeArraySizeException

java - 从文件读取,内存不足

delphi - 高分辨率 exe 图标导致 Windows 桌面快捷方式上的低分辨率图标

c++ - Qt 应用程序无法在 Windows 上启动

c++ - 如何*正确*地将 std::string 转换为无符号 char[] 数组。我想我做错了,有人指出我正确的方向吗?

c++ - 为什么这个友元函数不能访问类的私有(private)成员?

java - 如何使 FileUtils 追加而不是覆盖文本文件

c# - 以编程方式控制资源管理器窗口