2011-02-18 4 views

답변

30

체크 DirectoryInfo.Parent가

DirectoryInfo d = new DirectoryInfo(""); 
if(d.Parent == null) { IsRoot = true; } 
널인지 아닌지

또한 DirectoryInfo.Root를 사용하여 루트를 가져올 수도 있습니다.

3

this을 시도해보십시오

if (Path.GetPathRoot(location) == location) {...} 
+0

그는 이미 경로가 있으며, 루트인지 확인하고 싶습니다. 루트를 얻지 못합니다. –

+3

@Titan : 루트를 가져 오는 것이 동일한 문자열을 반환하면 루트입니다. 최선의 방법은 아니지만 유효합니다. –

+0

@Ben은 사실이지만 훨씬 덜 효율적입니다. 2 개의 문자열로 작업 할뿐만 아니라 그것도 비교해야합니다. –

6

그것은 훨씬 더 복잡 부모의 속성을 확인 이상입니다.

Determining Whether a Directory Is a Mounted Folder

한 가지 방법은 GetVolumeNameForVolumeMountPoint이 성공하는지 확인하는 것입니다.

물론 네트워크 경로에서 작동하지 않을 수도 있습니다. 네트워크 드라이브가 파티션의 루트 디렉토리를 나타내면 원격으로는 불가능할 수 있습니다.

+0

내 프로그램은 다음과 같습니다. C# 및 GetVolumeNameForVolumeMountPoint는 네이티브 C 함수입니다. 어쨌든 DirectoryInfo.Parent는 완벽하게 작동하는 것 같습니다. 팁을 가져 주셔서 감사합니다. – asmo

+1

마운트 지점에 관해 묻지 않는 한 완벽하게 작동합니다. 어떤 경우에는'DirectoryInfo.Parent'는 실제로 다른 파티션의 루트 디렉토리 일 때 서브 디렉토리라는 것을 알려줍니다. 특정 디렉터리가 파티션의 루트인지 여부를 테스트 할 관리 기능이 없기 때문에 기본 Win32 함수를 제안했습니다. –

+0

오, 이제 알겠습니다. 그 점을 지적 해 주셔서 감사합니다! – asmo

1

여기 내가 찾은 또 다른 방법이있다 :

public static bool IsLogicalDrive(string path) 
{ 
    return Directory.GetLogicalDrives().Contains(path); 
} 

주어진 경로가 현재 시스템의 논리 드라이브 중 하나를 나타냅니다 경우 이것은 실제로 확인합니다.

+0

모든 파티션에 고유 한 드라이브 문자가있는 것은 아닙니다. http://technet.microsoft.com/en-us/library/cc938934.aspx –

+0

'Directory.GetLogicalDrives'는'string []'을 반환합니다. 'System.Array'는'System.Collections.IList'를 구현하지만 Contains에 대한 명시 적 인터페이스 구현을 제공합니다 : ((.NET 3.5+ : https://msdn.microsoft.com/en-us/library/bb336401(v = vs.110) .aspx)) ((.NET 2, 3 : https://msdn.microsoft.com/en-US/library/system.array.system.collections.ilist.contains(v=vs.85)) .aspx)) ((.NET 1.1 : https://msdn.microsoft.com/en-us/library/aa310885(v=vs.71)).aspx)) Contains를 호출하기 전에 배열을 'IList'로 형변환해야합니다. –

2

또한 여기 내가 찾은 또 다른 방법이있다 :이 함수가 true를 돌려

public static bool IsLogicalDrive(string path) 
{ 
    return (new DirectoryInfo(path).FullName == new DirectoryInfo(path).Root.FullName; 
} 

경우, 그것은 주어진 경로가 루트 드라이브를 나타낸다는 것을 의미합니다!

+0

2 개의 객체를 만들어야합니까? "return path == Path.GetPathRoot (path)" –

+0

@DarrelLee, 어떤 경우 Path.GetPathRoot()가 더 편리한 옵션 일 수 있다는 것에 동의하지만, 상대 경로의 루트를 찾지 못합니다. https://docs.microsoft.com/en-us/dotnet/api/system.io.path.getpathroot?view=netframework-4.7 또한 문자열 비교를 사용하기 때문에 양측이 같은 서식을 얻는다. –

+0

그 주목할 점은'new DirectoryInfo (path) .Root.FullName'조차도 드라이브 문자의 대소 문자 버전을 반환 할 수 있기 때문에 일관성이 있는지 확실하지 않습니다. 더 나은 문자열 변환을 수행합니다. –

관련 문제