不要在目录列表视图中显示隐藏文件

时间:2013-01-08 20:01:30

标签: c# winforms listview

我有代码生成计算机的listview目录。当我打开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);
}

3 个答案:

答案 0 :(得分: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目录不是病毒扫描程序使用的{{1}}目录。

答案 1 :(得分:0)

对listview项目运行迭代,并删除它们扩展名为.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是否被隐藏,删除相应的项目。

注意:下一次,请发送一些代码行,这样可以更好地解决问题。

答案 2 :(得分: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属性,但这会导致ProgramDataListView之类的目录丢失,我就是不确定你想要的。