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

我有代码生成我的计算机的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); } 

这样的事情应该有效

 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属性,但是这会导致ListView中丢失像ProgramData这样的目录,我不确定你想要它。

 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目录并由病毒扫描程序使用。

对listview项运行迭代并删除它们扩展名为.bin的项。

你可以用这段代码找到.bin(假名):

 for(int i=0;i 

另一个假名:如果你想概括它,你应该使用像这样的文件属性类作为列表视图项:

 string filePath = listview1.items[i]; // get file attributes System.IO.FileAttributes fileAttributes = System.IO.File.GetAttributes(filePath); 

现在您应该检查fileAttributes是否被隐藏,删除相应的项目。

注意:下一次,请发送一些代码行,最好是问题救赎。