1

Microsoft Visual Studio 2003 でコンパイルされた C++ コマンド ライン プログラムがあり、結果の 32 ビット実行可能ファイルを Windows 7 (64 ビット バージョン) で実行しています。不可解な奇妙さを除いて、ほとんどのことが正しく機能します。

起動時に、プログラムは ifstream を使用してテキスト ファイルを読み込もうとします。管理者コマンド プロンプトを開くか、エクスプローラーで右クリックして [管理者として実行] を選択して、プログラムを管理者として実行すると、すべて正常に動作し、プログラムは現在のバージョンのファイルを読み取ります。

代わりに、通常のコマンド プロンプトから実行するか、エクスプローラーをダブルクリックして実行すると、プログラムは代わりに昨日のテキスト ファイルの古いバージョンを認識します。ファイルを削除しても、プログラムは問題なくファイルを開き、古い内容を読み取ります。

非管理者モードでファイルを実行するtypenotepad、正しい最新バージョンが表示され、問題はプログラムに限定されて表示されます。ファイルへの可能な限りの許可を変更せずにユーザーに与えようとしました。

考えられる手がかりの 1 つはproperties、エクスプローラーからテキスト ファイルにアクセスして [以前のバージョン] の下を見ると、昨日の以前のバージョンが 1 つリストされており、その内容はプログラムが読み取ろうとしたときに表示されるものと同じであるということです。ファイル。

どういうわけか私のプログラムは、管理者として実行していないときにファイルシステムの古いビューでスタックしているように見え、代わりにこの以前のバージョンが表示されます.

4

1 に答える 1

2

入力ファイルに絶対パス名を使用していない場合は、間違ったファイルを読み込んでいる可能性があります (ファイルを削除した後にファイルを読み取ることができるという事実によって証明されます)。つまり、システムのどこかに古いファイルの別のコピーがあり、それをプログラムが読み取っています。

Microsoft のProcMonツール (または古い FileMon) を使用すると、アプリケーションがアクセスしているファイルを表示できます。

于 2012-06-06T20:47:23.110 に答える