2012-05-03 2 views
2

전체 게시물이 관련되어 있으므로 전체 게시물을 읽으십시오. 재귀 적으로 모든 서브 디렉토리를 통해Windows 7의 경우 폴더가 존재하지 않는다고 주장

static void DumpDir(string dir) 
{ 
    string[] subdirs = Directory.GetDirectories(dir); 
    foreach (string subdir in subdirs) 
    { 
     DumpDir(subdir); 
    } 

    string[] files = Directory.GetFiles(dir); 

} 

static void Main(string[] args) 
{ 
    string startdir = @"G:\multimedia_dump"; 
    dirindexstart = startdir.Split('\\').Length; 
    string[] dirs = Directory.GetDirectories(startdir); 

    foreach (string dir in dirs) 
    { 
     DumpDir(dir); 
    } 
} 

그것은 하드 코딩 된 디렉토리를 열고, 루프 :

나는이 C# 코드를 썼다. 그게 전부입니다. 그게 전부 야.

그러나, 특정 폴더에 오류 :이 초기 디렉토리가 아닌 방법

The Error

알 수 있습니다. 코드를 따르는 경우 논리적으로 Directory.GetDirectories() 호출 중 하나에서 파생되어야합니다. 이 폴더 이름은 잘못 생성되지 않았습니다. 그것은 진짜입니다.

뿐만 아니라 그것이 진짜,하지만 난 탐색기의 GUI에서 탐색 할 수 있습니다 : 당신은 CMD의 폴더로 이동하면 이상하게

GUI Lets Me Navigate There

는, 그것은 DIR에 표시됩니다하지만, 폴더 이름에 대한 제안을 얻을 때까지 Tab 키를 누르면 CD가 들어갈 수 없습니다. 나는 제 3의 고리를 게시 할 것이지만, 내가 새로운 것이기 때문에이 일이 나를 허락하지 않을 것이다.

무엇을 제공합니까? 나는이 폴더를 생성 한 소프트웨어가 어떤 종류의 저수준 NTFS 호출을 사용했다고 생각한다. 이러한 폴더 이름을 프로그래밍 방식으로 삭제하거나이 오류를 해결할 수있는 방법이 있습니까? 그렇기 때문에 존재하지 않아야하는 폴더에 액세스 할 수 있습니까?

+0

해당 폴더 이름에'|'가 있습니까? – CodesInChaos

+0

나는 그것이 커서라고 생각했고, 디렉토리 이름은 공백으로 끝났다. –

답변

1

경로에 |이있는 것 같습니다. 이는 정상적인 Win32 API에 관한 한 불법 문자이지만 NT API와 관련이 없습니다.

경로 앞에 \\?\이라는 접두사를 붙이면 일부 Win32 경로 제한 (예 : 최대 경로 길이 ~ 260 자)을 사용하지 않도록 설정할 수 있지만 |은 포함되지 않은 것처럼 보입니다.

따라서이 문제를 해결하려면 NT APIs으로 내려가 야합니다.

1

디렉토리 이름 끝에 공백이 있습니까? 탐색기를 쏜 장면이있는 것 같습니다. 허용되지 않는다고 생각하는 도구가 있습니다. 일부 도구는 공백을 없애기 때문에 도구가 불일치하는 원인이됩니다.

+0

예, 끝 부분의 공간이라고 생각합니다. 첫 번째 오류 메시지를보십시오. 공간이 다듬어졌습니다. – Steve

0

이름을 위생적으로 처리하는 해결책을 찾았지만 편집하기 전에이를해야합니다. 파일을 ROBOCOPY하면 파일 및 폴더 이름에서 잘못된 문자가 제거됩니다.

관련 문제