2009-09-17 2 views
1

파일 시스템 항목이 bitmasks를 사용하는 것보다 디렉토리인지 쉽게 테스트 할 수 있습니까?.NET : 비트 마스크보다 디렉토리를 쉽게 테스트 할 수 있습니까?

Dim folderItems As String() = Directory.GetFileSystemEntries(aFolder) 
Dim someDirItem As String = folderItems(0) 
Dim fInfo As System.IO.FileInfo = New System.IO.FileInfo(someDirItem) 
Dim isDirectory As Boolean = (CInt(fInfo.Attributes) And CInt(FileAttributes.Directory)) > 0 

(FileAttributes.Directory 16 인) :

나는 내 응용 프로그램 중 하나에이 코드를 (이초 라인 folderItems을 통해 루프에서 실제로 있지만, 단순화를 위해 첫 번째 요소를 가정)이있다.

이 방법이 효과가 있지만 비트 단위 AND를 1000 (기준 2)와 함께 사용하는 것보다 쉬운 방법이 있습니까?

+0

내가이 개 답변을 동등하게 좋은 그러나 나는 하나를 받아들이 예의라고 생각합니다, 질문은 대답하지 않은 경우에 동의 , 적어도 다른 쪽을지지해라. 나는 일반적인 관행에 잘못 될 수는 있지만 그것은 공정한 것처럼 보인다. – esac

답변

11

방법에 대해 : fullpath에이 디렉토리인지 여부를

System.IO.Directory.Exists(fullPath) 

true를 반환합니다.

0

비트 비교가 어렵습니까? 이 방법을 사용하는 것을 정말로 싫어한다면 boolean의 데이터 구조를 노출하고 프로젝트에서 포트를 포팅하는 유틸리티 클래스를 작성하면됩니다.

3

Directory.Exists(path)을 사용할 수 있었습니까?

1
Dim folderItems As String() = Directory.GetFileSystemEntries(aFolder) 
Dim someDirItem As String = folderItems(0) 
Dim isDirectory As Boolean = System.IO.Directory.Exist(someDirItem) 
2

당신은 비트 플래그를 테스트 열거에 대한 확장 방법을 만들 수 있습니다. 이런 식으로 뭔가 :

public static bool Has<T>(this System.Enum type, T value) 
{ 
    try 
    { 
     return (((int)(object)type & (int)(object)value) == (int)(object)value); 
    } 
    catch 
    { 
     return false; 
    } 
} 

그런 다음 당신은 그냥 부를 것이다 :

Bool isDirectory = fInfo.Attributes.Has(FileAttributes.Directory)) 

죄송합니다, 즉 C#을하지만 그것을 변환하기 어려울 안, 난 그냥 제네릭 내 VB 구문을 모르는 . 누구든지 VB 번역을 편집하고 추가하십시오. 비교를 수행 할 때

+0

흥미롭고보다 일반적으로 적용 가능한 해결책. 감사. –

+0

이것은 C#을 VB로 또는 그 반대로 변환합니다. http://www.developerfusion.com/tools/convert/csharp-to-vb/ – dummy

1

당신은 CInt를 사용할 필요가 없습니다 :

Dim isDirectory As Boolean = _ 
    (fInfo.Attributes And FileAttributes.Directory) = FileAttributes.Directory 
+0

예, 간단합니다. 감사. –

관련 문제