我有代码生成计算机的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);
}
答案 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
属性,但这会导致ProgramData
中ListView
之类的目录丢失,我就是不确定你想要的。