2011-06-30 38 views
3

私はofstreamがWindows 7の隠しファイルで動作しないことに気付きました。ofstream Windows 7の隠しファイルで動作しません

ここにクイックテストコードがあります。ここで

#include <fstream> 
#include <iostream> 
#include <tchar.h> 
#include <windows.h> 

int main() {  
    { 
     std::ifstream file2(_T("c:\\a.txt")); 
     if (file2.is_open()) { 
      std::cout << "ifstream open" << std::endl; 
     } else { 
      std::cout << "ifstream not open!" << std::endl; 
     } 
    } 

    // SetFileAttributes(_T("c:\\a.txt"), FILE_ATTRIBUTE_NORMAL); 
    SetFileAttributes(_T("c:\\a.txt"), FILE_ATTRIBUTE_HIDDEN); 

    { 
     std::ofstream file(_T("c:\\a.txt")); 
     if (file.is_open()) { 
      std::cout << "ofstream open" << std::endl; 
     } else { 
      std::cout << "ofstream not open!" << std::endl; 
     } 
    } 
    getchar(); 
} 

私はFILE_ATTRIBUTE_NORMALを使用していた場合、私は

ifstream open 
ofstream not open! 

を取得しています出力され、ofstreamが正常に開かれます。

私は管理者としてプログラムを実行しません。しかし、私は以下のリンカーオプションを使用します。ユーザーアカウント制御(UAC)を有効にためませんをオンにする必要が

linker options

我々は、管理者としてアプリケーションを起動していない場合は、重要です。 OSは、保護された代わりにC:\Users\yccheok\AppData\Local\VirtualStore\a.txtに実際のファイルを書き込むのに役立ちますC:\

ofstreamはWindows 7の隠しファイルで失敗しますか?

+0

"次のリンカーオプション"を使用していると言ったときに参照している7つのリンカーオプションはどれですか?それはなぜ重要だと思いますか?仮想店舗はこの質問に実際に関連していますか? –

+0

情報を更新して、UACのNoを重要にする理由を理解できるようにします。 –

+0

'ofstream'を開く前に' ifstream'を閉じようとしましたか? –

答えて

2

はい。 CreateFile documentationに記載されているように、「CREATE_ALWAYSFILE_ATTRIBUTE_NORMALが指定された場合、CreateFileは失敗し、ファイルが存在し、FILE_ATTRIBUTE_HIDDENまたはFILE_ATTRIBUTE_SYSTEM属性を持つ場合、最後のエラーはERROR_ACCESS_DENIEDに設定されます。

以上読み

CreateFileCREATE_ALWAYSFILE_ATTRIBUTE_NORMALの両方が指定されている場合は失敗し、ファイルが FILE_ATTRIBUTE_HIDDENおよび/または FILE_ATTRIBUTE_SYSTEM属性を持っている場合。

ofstreamはこのようにCreateFileを呼び出します。

+0

しかしwierdは、あなたが「Windows Server 2003とWindows XP/2000」で指定したドキュメントを指定しています。しかし、私はWindows 7でこの問題に遭遇します。私はWindows XPでこのような問題に遭遇しませんでした。 –

+0

私は問題がWindows 7でしかないと思った。私はさらにテストをします。それはWindows XPにもあるようです。 –

関連する問題