我最近在我的NTFS卷上禁用了8.3文件名,并注意到枚举具有大量文件的新目录所花费的时间显着减少(现在只花费25%的时间)。但是,这不适用于现有文件。
要更改它,我想创建一个exe,它将递归遍历驱动器上不在系统文件夹中的所有文件,将它们移动到临时目录,然后将它们移回以强制8.3文件删除名称。我已经知道如何枚举目录的文件并对每个目录执行此操作,但我不太清楚如何获取磁盘上所有目录的列表,而不包含任何系统目录。我可以在DirectoryInfo对象中查找属性吗?如果没有,我可以采取什么其他方法来实现这一目标?
答案 0 :(得分:0)
你走了。我相信这就是你追求的...... 有关详细信息,请参阅FileAttributes。
public void RecursivePathWalk(string directory)
{
string[] filePaths = Directory.GetFiles(directory);
foreach (string filePath in filePaths)
{
if (IsSystem(filePath))
continue;
DoWork(filePath);
}
string[] subDirectories = Directory.GetDirectories(directory);
foreach (string subDirectory in subDirectories)
{
if (IsSystem(subDirectory))
continue;
RecursivePathWalk(subDirectory);
}
}
public void DoWork(string filePath)
{
//Your logic here
}
public bool IsSystem(string path)
{
FileAttributes attributes = File.GetAttributes(path);
return (attributes & FileAttributes.System) != 0;
}