2017-05-19 5 views
3

私は自分のフォルダブラウザでちょっと実験しています。私は、Windows 7のSystem32フォルダを見ると、奇妙な結果が出ていることに気付きました。ここでは、コードがあります:DirectoryInfo.GetFiles()すべてのファイルを返さない

DataTable dt=new DataTable(); 
string Folder="C:\\Windows\\System32"; 
DirectoryInfo DI = new DirectoryInfo(Folder); 
foreach (FileInfo FI in DI.GetFiles()) 
{ 
    DataRow Row = dt.NewRow(); 
    if(FI.Name== "accelerometerdll.DLL") 
    { 

    } 
    Row["Name"] = FI.Name; 
    Row["Created"] = FI.CreationTime; 

    Row["Size"] = FI.Length; 
    dt.Rows.Add(Row); 
} 
dataGridView1.DataSource = dt; 

実行すると、ファイルのリストは不完全です。ファイルの総数は、Windowsエクスプローラと比較して400ファイル以上離れています。

"accelerometerdll.dll"という名前のファイルがこの問題を解決するために単純にチェックされています。そのファイルは、絶対にSystem32フォルダにあります。私はExplorerでそれを見ることができ、私はDIRを実行するとコマンドウィンドウでそれを見ることができます。それは私のデータテーブルには決して現れません。条件は決して満たされません。そのような単純に見えない。私は同じ結果を管理者として実行しようとしました。

「12520437.cpx」というファイルが表示され、エクスプローラまたはコマンドウィンドウに表示されません。 System32フォルダではなくSysWOW64フォルダに表示されますか?

ここでの主な目標は、エクスプローラがフォルダを開いたときと同じファイルを完全に表示することです。

アイデア?

+2

は、アプリケーションの32ビットアプリケーションですか?それはAnyCPUですが、「32ビット優先」フラグがセットされていますか?表示するコード(ハー​​ドコードされたパス)を使用していますか、Environment.GetSpecialFolder()を使用していますか? 2番目の質問について:GetFiles()は、隠しファイルと保護されたファイル(デフォルトではエクスプローラでは表示されない可能性があります)を含むすべてのファイルを返します。あなたのテストについて: '=='は大文字と小文字を区別した比較です。 –

+0

@AdrianoRepettiここでは、ハードコードされたパスを使用しています。はい任意のCPUとはい32ビットを優先します。これらはGetSpecialFolders()以外に影響を与えるとは思わなかった。 –

+0

[ファイルシステムリダイレクタ]の世界へようこそ(https://msdn.microsoft.com/en-us/library/windows/desktop/aa384187(v = vs.85).aspx) –

答えて

2

知識豊富な回答に基づいて32ビットのコンパイラ指令を無効にする必要がありました。

詳細情報はこちらです:

File System Redirector

関連する問題