2011-01-18 9 views
5

fopenを使用してファイルを作成しようとするたびに、fopenはファイルが正しく開かれているかのように動作し、実際にはファイルを作成しません。私のプログラムは、そこに書き込むための管理者アクセスが必要なのでシステムルートフォルダへの書き込みアクセス権を持っていませんが、なぜfopen()はエラーを出さないのですか?システムドライブ(C:)にファイルを作成するときにfopenが表示されない

エラーがあるかどうかを確認するにはどのようなアイデアですか?保護されたディレクトリでファイルを開くときに返されるファイルハンドルは、書き込みアクセス権を持つディレクトリでファイルを開いたときとまったく同じです。

私はfopen(fopen、_wfopen、_wfopen_s)のさまざまなバージョンでこれを試しましたが、それらはすべて同じ出力を持っています。

興味深いことに、GetLastError()はERROR_ALREADY_EXISTSを返します。

ここで私が使用しているコードです:

FILE *FileHandle; 
DWORD error = _wfopen_s(&FileHandle, L"\\filename.txt", L"a"); 
Win32Error = GetLastError(); 

if (error != 0 || FileHandle == NULL) 
{ 
    //Throw error 
} 
else 
{ 
    //write to file 
    //close file 
} 

EDIT:rerunが指摘したように、ファイルが原因virtualizationの%のAPPDATA%の中に作成されたばかりされては。誰もこの機能を無効にする方法を知っていますか?

答えて

6

これは仮想ストアと関係がある可能性があります。いくつかの情報についてはhereを見てください。

+0

もちろんあります。 –

+0

うわー、ええ、それはログが終了したところです、ありがとう!任意のアイデアはどのようにfopenを代わりにエラーをスローすることができますか? –

3

投稿したコードをそのまま実行している場合は、ルートディレクトリにファイルをまったく要求していません。代わりに"c:\\filename.txt"(2つの '\'文字)に行く必要があります。現在のディレクトリを見ると、奇妙な名前のファイル(基本的には<formfeed>ilename.txtと思います)が正常に作成されたことがわかります。

+0

いいえ、それは私の質問のタイプミスでした。私はちょうど私の実際のコードでそれを更新しました。ありがとう –

2

私たちはレジストリ仮想化で同様の問題を抱えていました。はい、それはVistaの後にも仮想化されています。

解決策は、プロパティ - >リンカ - >マニフェストファイル - > UAC実行レベル - > requireAdministratorです。 IMHO、それはあなたのケースでも動作するかもしれません。

関連する問題