2012-10-24 63 views
1

我最近禁用了我的NTFS捲上的8.3個文件名,並注意到枚舉具有大量文件的新目錄所花費的時間量顯着減少(現在只需要25%的時間)。但是,這不適用於現有文件。如何遞歸獲取所有非系統目錄?

爲了改變這種情況,我想創建一個exe文件,遞歸地遍歷驅動器中不在系統文件夾中的所有文件,將它們移動到臨時目錄並將它們移回來以強制8.3文件名刪除他們。我已經知道如何通過目錄的文件枚舉並對其中的每個文件執行此操作,但是我不太清楚如何獲取磁盤上所有目錄的列表,而不包括任何系統目錄。有沒有我可以在DirectoryInfo對象內查找的屬性?如果沒有,我可以採取什麼其他方法來實現這一目標?

+2

你如何定義'系統目錄'? –

+0

通過系統目錄,我的意思是任何對操作系統至關重要的目錄。 C:\ Windows \以外的任何目錄我應該關注嗎?我不確定是否有其他司機或其他地方。 – Lunyx

+0

是否將系統文件標記爲具有屬性的系統文件? – TGlatzer

回答

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; 
} 
+0

我的標準Windows 7安裝中的C:\ Windows文件夾沒有設置系統標誌。 – Hannobo

+0

我可以證實道格所說的話。 – Lunyx