.NET:比位掩码更容易测试目录?

时间:2009-09-17 15:42:53

标签: .net vb.net directory

是否有更简单的方法来测试文件系统项是否是目录而不是使用位掩码?

我在我的一个应用程序中有这个代码(两个第二行实际上是在folderItems的循环中,但为了简单起见假设第一个元素):

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)。

这样可行,但是比使用按位AND和1000(基数2)更简单吗?

6 个答案:

答案 0 :(得分:11)

怎么样:

System.IO.Directory.Exists(fullPath)

如果fullPath是目录,则返回true。

答案 1 :(得分:3)

您可以使用Directory.Exists(path)不是吗?

答案 2 :(得分: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翻译。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

执行比较时,您无需使用CInt

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

答案 5 :(得分:0)

按比例比较难吗?如果你真的不喜欢这样做,只需编写一个实用程序类,公开booleans的数据结构,并在项目中移植它。