2011-02-25 8 views
2

다음과 같이 ForceDirectories 함수를 사용하고 있습니다.ForceDirectories는 False를 반환합니다.

ForceDirectories('C:/Path/To/Dir'); 

그리고 False를 반환하고 전혀 디렉토리가 생성되지 않습니다. GetLastError은 0을 반환합니다. 관리자 권한으로 프로그램을 실행하고 있습니다.

ForceDirectories('C:/Path'); 
ForceDirectories('C:/Path/To'); 
ForceDirectories('C:/Path/To/Dir'); 

각 호출이 성공하고 디렉토리가 만들어집니다. 그러나이 ForceDirectories 함수의 유용성을 void합니다. 아무도 왜 이런 식으로 행동하는지 알아? (내가 너 데이비드를보고있어)

답변

9
는 플랫폼 (Win32에서)에 대한 올바른 것을에 경로 구분 기호를 변경

모든 좋은 것이있을 수 있습니다 때

ForceDirectories('c:\Path\To\Dir'); 

어떤 미래의 시간에 대비하여 (플랫폼에서 코드를 이식하려면

이 재사용 (전용 검색 개선 될 수
s := 'c:/Path/To/Dir'; // << example 

    s := StringReplace(s, '/', PathDelim, [rfReplaceAll]); 
    s := StringReplace(s, '\', PathDelim, [rfReplaceAll]); 
    ForceDirectories(s); 

/아니오 = PathDelim)을 없지만 원칙을 보여 기호를 대체 : 당신이 수) 델파이 코드에 관련.

+1

실제로 /와 \는 모두 Windows의 유효한 경로 구분 기호입니다. – Kokonotsu

+0

... 후자 만 "정상적인"것입니다. –

+2

"올바른 플랫폼"은 ForceDirectories()가 Windows API를 직접 호출하여 경로를 만들지는 않지만 경로를 생성하지 않는 전체 경로에서 CreateDir을 호출하기 때문에 "올바른 델파이 RTL"을 의미합니다. 있다. 경로 요소를 식별하기 위해 MSWINDOWS가 컴파일러에 의해 정의 될 때 "\"로 설정된 "PathDelim"을 사용하여 경로를 분리합니다. 따라서 Win32에서 ForceDirectories의 경우 올바른 경로 구분 기호는 '\'입니다. – Deltics

5

분명히 ForceDirectories만이 \이 아니라 / 님의 ... 바보 같은 문제가 해결되었습니다.

+0

경로를 다루는 대부분의 것들, Windows에서는 백 슬래시 만 있습니다. –

관련 문제