不要在目录列表视图中显示隐藏文件
我有代码生成我的计算机的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是否被隐藏,删除相应的项目。
注意:下一次,请发送一些代码行,最好是问题救赎。