我有一个用Microsoft Visual Studio 2003编译的C ++命令行程序,我在Windows 7(64位版本)下运行生成的32位可执行文件。除了一个令人费解的奇怪之外,大多数事情都能正常工作。
启动时,我的程序尝试使用和ifstream读取文本文件。如果我以管理员身份运行程序,可以通过打开管理员命令提示符,或右键单击资源管理器并选择“以管理员身份运行”,然后一切正常,我的程序将读取文件的当前版本。
如果相反,我从正常的命令提示符运行,或者在资源管理器中双击,我的程序会从昨天看到旧版本的文本文件。即使我删除了该文件,我的程序仍然很乐意打开文件并读出旧内容。
如果我在非管理员模式下对文件运行type
或notepad
,则显示正确的最新版本,问题仅限于我的程序。我已尝试将该文件的所有可能权限提供给我的用户,而不做任何更改。
一个可能的线索是,如果我从资源管理器中查看文本文件中的properties
并查看“以前的版本”,则从昨天开始列出一个以前的版本,其内容与我的程序相同正在看它何时尝试读取文件。
不知何故,我的程序似乎停留在文件系统的旧视图中,而不是以管理员身份运行而是看到以前的版本,我希望有人可以向我解释为什么会发生这种情况并且(希望如何)解决它
答案 0 :(得分:2)
如果您没有为输入文件使用绝对路径名,那么您可能正在读取错误的文件(可以在删除文件后读取该文件)。换句话说,系统中某处有旧文件的另一个副本,这就是您的程序正在阅读的内容。
Microsoft的ProcMon工具(或较旧的FileMon)可以显示您的应用程序正在访问哪个文件。