0

コンピューターのリストビュー ディレクトリを生成するコードがあります。C ディレクトリを開くと、$RECYCLE.Bin が表示されます。これらのファイルが表示されない場所に置く方法はありますか?

foreach (string dir in folders)
{
    dirData[0] = dir.ToString();
    dirData[1] = dir.Length.ToString();
    dirData[2] = File.GetLastAccessTime(dir).ToString();
    ListViewItem lv = new ListViewItem(dirData, imageList1.Images.Count - 1);
    lv.Tag = dir;

    imageList1.Images.Add(BlackFox.Win32.Icons.IconFromExtensionShell(".*", BlackFox.Win32.Icons.SystemIconSize.Small).ToBitmap());

    listView1.SmallImageList = imageList1;
    listView1.Items.Add(lv);
}
4

3 に答える 3

3
var dirs = Directory.GetDirectories(@"C:\")
             .Select(d => new { Attr = new DirectoryInfo(d).Attributes, Dir = d })
             .Where(x => !x.Attr.HasFlag(FileAttributes.System))
             .Where(x => !x.Attr.HasFlag(FileAttributes.Hidden))
             .Select(x => x.Dir)
             .ToList();

System+Hiddenこれは、次のようなディレクトリを無視するだけでなく、ディレクトリではなく、ウイルス スキャナによって使用されるディレクトリC:\$Recycle.Binも無視します。C:\$AVG8.VAULT$System

于 2013-01-08T20:11:36.917 に答える
0

このようなものが動作するはずです

var folders = Directory.GetDirectories(@"C:\")
.Where(d => !new DirectoryInfo(d).Attributes.HasFlag(FileAttributes.System | FileAttributes.Hidden));

foreach (string dir in folders)
{
   .....

一部の人々が理解するのが難しいと感じるかもしれないので、答えを拡張させてください.これはディレクトリを無視SystemHiddenします.

すなわち:

"C:\\$Recycle.Bin"

"C:\\Documents and Settings"

"C:\\System Volume Information"

すべての隠しディレクトリを無視したい場合は、単に linq ステートメントから属性を省略できますが、これにより、必要かどうかわからないFileAttributes.Systemディレクトリが失わProgramData れます。ListView

于 2013-01-08T20:25:20.367 に答える
0

リストビュー アイテムに対して反復処理を実行し、拡張子が .bin のアイテムを削除します。

次のコード (仮名) で .bin を見つけることができます。

for(int i=0;i<items_count;i++)
{
  if(listview1.items[i].Substring(listview1.items[i].length-3,listview1.items[i].length)=="bin")
   listview1.items.remove(i);
}

別の仮名 : これを一般化する場合は、リスト ビュー アイテムに次のようなファイル属性クラスを使用する必要があります。

string filePath = listview1.items[i];

// get file attributes
System.IO.FileAttributes fileAttributes = System.IO.File.GetAttributes(filePath);

ここで、fileAttributes が hidden かどうかを確認し、対応する項目を削除する必要があります。

注 : 次回は、コード行の一部を送信してください。問題の解決に役立ちます。

于 2013-01-08T20:12:38.857 に答える