1

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

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

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

如果我以非管理员模式运行typenotepad处理文件,则会显示正确的最新版本,问题似乎仅限于我的程序。我已经尝试将文件的所有可能权限授予我的用户而不进行任何更改。

一个可能的线索是,如果我从资源管理器转到properties文本文件并在“以前的版本”下查看,则会列出昨天的一个以前的版本,它的内容与我的程序尝试读取时看到的相同文件。

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

4

1 回答 1

2

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

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

于 2012-06-06T20:47:23.110 回答