2012-10-24 2 views
1

최근에 NTFS 볼륨에서 8.3 개의 파일 이름을 사용할 수 없게 만들고 매우 많은 양의 파일로 새 디렉터리를 열거하는 데 걸리는 시간이 현저히 줄어 들었습니다 (단지 25 %의 시간이 소요됩니다). 그러나 이는 기존 파일에는 적용되지 않습니다.모든 비 시스템 디렉토리를 재귀 적으로 가져올 수 있습니까?

변경하려면 시스템 폴더에없는 드라이브의 모든 파일을 재귀 적으로 이동하고 임시 디렉터리로 이동 한 다음 다시 이동하여 8.3을 강제로 실행하는 exe 파일을 만들고 싶습니다. 파일 이름 제거. 나는 이미 디렉토리의 파일을 열거하고 각각에 대해이 작업을 수행하는 방법을 알고 있지만 시스템 디렉토리가 포함되지 않은 상태에서 디스크의 모든 디렉토리 목록을 얻는 방법을 잘 모르겠습니다. DirectoryInfo 객체 내에서 찾을 수있는 속성이 있습니까? 그렇지 않다면, 이것을 달성하기 위해 어떤 다른 접근법을 취할 수 있습니까?

+2

'시스템 디렉토리'는 어떻게 정의합니까? –

+0

시스템 디렉토리 란 OS에 중요한 디렉토리를 의미합니다. 걱정해야 할 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

관련 문제