转载请注明出处:
原创作者: Jaron , CSDN IIS技术版主 2007/3/26
- CSDN
- 佳融软件
什么是BirBrowseFlags ?
DirBrowseFlags 包含“标志”一节中提到的、控制是否启用目录浏览,可以提供多少目录和文件信息(如果启用浏览)以及目录中是否包含默认页的标记。详细的说明可参考 MSDN中相关的文档 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iissdk/html/1de2ef6a-cc68-4dfd-a87b-b325710ed54e.asp ,或IIS6帮助说明中,Internet信息服务 --> 参考 --> 配置数据库属性参考部分。
关于如何读取IIS站点或虚拟目录详细信息的文章请参阅我昨天写的文档: http://blog.csdn.net/Jaron/archive/2007/03/24/1539987.aspx
DirBrowseFlag 与 AccessFlags 数据的处理与转换大致上差不多,相对而言DirBrowseFlag值转换起来要复杂一点,通过以下示例,希望大家能看懂相应的值是怎么转换而来的。逆算函数写得比较乱,但最终还是实现了其功能。有兴趣的朋友可以试一下,看能否提供更好的逆算方法。
/**/
/// <summary>
/// 处理Flag数据
/// </summary>
public class handelFlags
... {
/**//// <summary>
/// 转换为DirBrowseFlags属性数组
/// </summary>
/// <param name="adsiValue"></param>
/// <param name="Collections"></param>
/// <returns></returns>
public static ArrayList ConvertToDirBrowseFlagsValueArray(Int64 adsiValue, Int64[] Collections)
...{
Array.Sort(Collections);
Array.Reverse(Collections);
ArrayList list = new ArrayList();
if (adsiValue >= 0)
...{
for (int i = 0; i <= 4; i++)
...{
if (adsiValue >= Collections[i])
...{
list.Add(Collections[i]);
adsiValue = adsiValue - Collections[i];
}
}
}
else
...{
if (adsiValue + 2147483586 <= 0)
...{
list.Add(Collections[6]);
Console.WriteLine(Collections[6]);
adsiValue = adsiValue + 2147483648;
if (adsiValue >= 0)
...{
for (int i = 0; i <= 4; i++)
...{
if (adsiValue >= Collections[i])
...{
list.Add(Collections[i]);
adsiValue = adsiValue - Collections[i];
}
}
}
}
else
...{
list.Add(Collections[5]);
adsiValue = adsiValue + 1073741824;
for (int i = 0; i <= 4; i++)
...{
if (adsiValue >= Collections[i])
...{
list.Add(Collections[i]);
adsiValue = adsiValue - Collections[i];
}
}
}
}
return list;
}
}
/// 处理Flag数据
/// </summary>
public class handelFlags
... {
/**//// <summary>
/// 转换为DirBrowseFlags属性数组
/// </summary>
/// <param name="adsiValue"></param>
/// <param name="Collections"></param>
/// <returns></returns>
public static ArrayList ConvertToDirBrowseFlagsValueArray(Int64 adsiValue, Int64[] Collections)
...{
Array.Sort(Collections);
Array.Reverse(Collections);
ArrayList list = new ArrayList();
if (adsiValue >= 0)
...{
for (int i = 0; i <= 4; i++)
...{
if (adsiValue >= Collections[i])
...{
list.Add(Collections[i]);
adsiValue = adsiValue - Collections[i];
}
}
}
else
...{
if (adsiValue + 2147483586 <= 0)
...{
list.Add(Collections[6]);
Console.WriteLine(Collections[6]);
adsiValue = adsiValue + 2147483648;
if (adsiValue >= 0)
...{
for (int i = 0; i <= 4; i++)
...{
if (adsiValue >= Collections[i])
...{
list.Add(Collections[i]);
adsiValue = adsiValue - Collections[i];
}
}
}
}
else
...{
list.Add(Collections[5]);
adsiValue = adsiValue + 1073741824;
for (int i = 0; i <= 4; i++)
...{
if (adsiValue >= Collections[i])
...{
list.Add(Collections[i]);
adsiValue = adsiValue - Collections[i];
}
}
}
}
return list;
}
}
/**/
/// <summary>
/// DirBrowseFlags
/// </summary>
public class DirBrowseFlags
... {
/**//// <summary>
/// 标志名 DirBrowseShowDate
/// 描述 设置为 true 时,浏览目录时将显示日期信息。
/// 配置数据库位掩码标识符 MD_DIRBROW_SHOW_DATE
/// 十进制值 2
/// 十六进制值 0x00000002
/// </summary>
public bool DirBrowseShowDate = false;
private Int64 DirBrowseShowDateValue = 0x00000000;
/**//// <summary>
/// 标志名 DirBrowseShowTime
/// 描述 设置为 true 时,显示目录时将显示文件时间信息。
/// 配置数据库位掩码标识符 MD_DIRBROW_SHOW_TIME
/// 十进制值 4
/// 十六进制值 0x00000004
/// </summary>
public bool DirBrowseShowTime = false;
private Int64 DirBrowseShowTimeValue = 0x00000000;
/**//// <summary>
/// 标志名 DirBrowseShowSize
/// 描述 设置为 true 时,浏览目录时将显示文件大小信息。
/// 配置数据库位掩码标识符 MD_DIRBROW_SHOW_SIZE
/// 十进制值 8
/// 十六进制值 0x00000008
/// </summary>
public bool DirBrowseShowSize = false;
private Int64 DirBrowseShowSizeValue = 0x00000000;
/**//// <summary>
/// 标志名 DirBrowseShowExtension
/// 描述 设置为 true 时,浏览目录时将显示文件扩展名。
/// 配置数据库位掩码标识符 MD_DIRBROW_SHOW_EXTENSION
/// 十进制值 16
/// 十六进制值 0x00000010
/// </summary>
public bool DirBrowseShowExtension = false;
private Int64 DirBrowseShowExtensionValue = 0x00000000;
/**//// <summary>
/// 标志名 DirBrowseShowLongDate
/// 描述 设置为 true 时,显示目录时将在扩展格式中显示日期信息。
/// 配置数据库位掩码标识符 MD_DIRBROW_LONG_DATE
/// 十进制值 32
/// 十六进制值 0x00000020
/// </summary>
public bool DirBrowseShowLongDate = false;
private Int64 DirBrowseShowLongDateValue = 0x00000000;
/**//// <summary>
/// 标志名 EnableDefaultDoc
/// 描述 设置为 true 时,浏览目录时系统会加载该目录的默认文档(由 DefaultDoc 属性指定)。
/// 配置数据库位掩码标识符 MD_DIRBROW_LOADDEFAULT
/// 十进制值 1073741824
/// 十六进制值 0x40000000
/// </summary>
public bool EnableDefaultDoc = false;
private Int64 EnableDefaultDocValue = 0x00000000;
/**//// <summary>
/// 标志名 EnableDirBrowsing
/// 描述 设置为 true 时,将启用目录浏览。
/// 配置数据库位掩码标识符 MD_DIRBROW_ENABLED
/// 十进制值 2147483648
/// 十六进制值 0x80000000
/// </summary>
public bool EnableDirBrowsing = false;
private Int64 EnableDirBrowsingValue = 0x00000000;
private Int64[] DirBrowseFlagsValueCollections = new Int64[9] ...{ 2, 4, 8, 16, 32, 1073741824, 2147483648, -1073741824, -2147483648 };
/**//// <summary>
/// 转换为ADSI可接受的值
/// </summary>
/// <returns></returns>
public Int64 Value()
...{
Int64 returnValue = 0;
if (DirBrowseShowDate) DirBrowseShowDateValue = 0x00000002;
if (DirBrowseShowTime) DirBrowseShowTimeValue = 0x00000004;
if (DirBrowseShowSize) DirBrowseShowSizeValue = 0x00000008;
if (DirBrowseShowExtension) DirBrowseShowExtensionValue = 0x00000010;
if (DirBrowseShowLongDate) DirBrowseShowLongDateValue = 0x00000020;
//如果启用默认文档,值为负数
if (EnableDefaultDoc)
...{
EnableDefaultDocValue = -0x40000000;
EnableDirBrowsingValue = 0x00000000;
}
//如果启用浏览,EnableDefaultDoc 值不可用,并且为负值
if (EnableDirBrowsing)
...{
EnableDefaultDocValue = 0x00000000;
EnableDirBrowsingValue = -0x80000000;
}
//如果EnableDirBrowsing和EnableDefaultDoc同时启用
if (EnableDirBrowsing && EnableDefaultDoc)
...{
EnableDefaultDocValue = -0x40000000;
EnableDirBrowsingValue = 0x00000000;
}
//如果EnableDirBrowsing为Flase,EnableDefaultDoc为True
if (!EnableDirBrowsing && EnableDefaultDoc)
...{
EnableDefaultDocValue = 0x40000000;
EnableDirBrowsingValue = 0x00000000;
}
returnValue = DirBrowseShowDateValue + DirBrowseShowTimeValue + DirBrowseShowSizeValue +
DirBrowseShowExtensionValue + DirBrowseShowLongDateValue + EnableDefaultDocValue + EnableDirBrowsingValue;
return returnValue;
}
/**//// <summary>
/// 转换为自定义的DirBrowseFlags属性
/// </summary>
/// <param name="Value"></param>
/// <returns></returns>
public DirBrowseFlags ValueToProperty(Int64 Value)
...{
ArrayList al = handelFlags.ConvertToDirBrowseFlagsValueArray(Value, this.DirBrowseFlagsValueCollections);
DirBrowseFlags dbf = new DirBrowseFlags();
for (int i = 0; i < al.Count; i++)
...{
switch (Math.Abs(Int64.Parse(al[i].ToString())))
...{
//2, 4, 8, 16, 32, -1073741824, -2147483648
case 2:
dbf.DirBrowseShowDate = true;
dbf.DirBrowseShowDateValue = Math.Abs(Int64.Parse(al[i].ToString()));
break;
case 4:
dbf.DirBrowseShowTime = true;
dbf.DirBrowseShowTimeValue = Math.Abs(Int64.Parse(al[i].ToString()));
break;
case 8:
dbf.DirBrowseShowSize = true;
dbf.DirBrowseShowSizeValue = Math.Abs(Int64.Parse(al[i].ToString()));
break;
case 16:
dbf.DirBrowseShowExtension = true;
dbf.DirBrowseShowExtensionValue = Math.Abs(Int64.Parse(al[i].ToString()));
break;
case 32:
dbf.DirBrowseShowLongDate = true;
dbf.DirBrowseShowLongDateValue = Math.Abs(Int64.Parse(al[i].ToString()));
break;
}
}
if (Value < 0)
...{
if (Value <= -1073741824)
...{
dbf.EnableDirBrowsing = true;
}
else
...{
dbf.EnableDefaultDoc = true;
}
if (Value >= -1073741824 && Value <= 2147483648)
...{
dbf.EnableDirBrowsing = true;
dbf.EnableDefaultDoc = true;
}
}
else
...{
if (Value >= 1073741824)
...{
dbf.EnableDefaultDoc = true;
}
else
...{
dbf.EnableDefaultDoc = false;
}
dbf.EnableDirBrowsing = false;
}
return dbf;
}
}
/// DirBrowseFlags
/// </summary>
public class DirBrowseFlags
... {
/**//// <summary>
/// 标志名 DirBrowseShowDate
/// 描述 设置为 true 时,浏览目录时将显示日期信息。
/// 配置数据库位掩码标识符 MD_DIRBROW_SHOW_DATE
/// 十进制值 2
/// 十六进制值 0x00000002
/// </summary>
public bool DirBrowseShowDate = false;
private Int64 DirBrowseShowDateValue = 0x00000000;
/**//// <summary>
/// 标志名 DirBrowseShowTime
/// 描述 设置为 true 时,显示目录时将显示文件时间信息。
/// 配置数据库位掩码标识符 MD_DIRBROW_SHOW_TIME
/// 十进制值 4
/// 十六进制值 0x00000004
/// </summary>
public bool DirBrowseShowTime = false;
private Int64 DirBrowseShowTimeValue = 0x00000000;
/**//// <summary>
/// 标志名 DirBrowseShowSize
/// 描述 设置为 true 时,浏览目录时将显示文件大小信息。
/// 配置数据库位掩码标识符 MD_DIRBROW_SHOW_SIZE
/// 十进制值 8
/// 十六进制值 0x00000008
/// </summary>
public bool DirBrowseShowSize = false;
private Int64 DirBrowseShowSizeValue = 0x00000000;
/**//// <summary>
/// 标志名 DirBrowseShowExtension
/// 描述 设置为 true 时,浏览目录时将显示文件扩展名。
/// 配置数据库位掩码标识符 MD_DIRBROW_SHOW_EXTENSION
/// 十进制值 16
/// 十六进制值 0x00000010
/// </summary>
public bool DirBrowseShowExtension = false;
private Int64 DirBrowseShowExtensionValue = 0x00000000;
/**//// <summary>
/// 标志名 DirBrowseShowLongDate
/// 描述 设置为 true 时,显示目录时将在扩展格式中显示日期信息。
/// 配置数据库位掩码标识符 MD_DIRBROW_LONG_DATE
/// 十进制值 32
/// 十六进制值 0x00000020
/// </summary>
public bool DirBrowseShowLongDate = false;
private Int64 DirBrowseShowLongDateValue = 0x00000000;
/**//// <summary>
/// 标志名 EnableDefaultDoc
/// 描述 设置为 true 时,浏览目录时系统会加载该目录的默认文档(由 DefaultDoc 属性指定)。
/// 配置数据库位掩码标识符 MD_DIRBROW_LOADDEFAULT
/// 十进制值 1073741824
/// 十六进制值 0x40000000
/// </summary>
public bool EnableDefaultDoc = false;
private Int64 EnableDefaultDocValue = 0x00000000;
/**//// <summary>
/// 标志名 EnableDirBrowsing
/// 描述 设置为 true 时,将启用目录浏览。
/// 配置数据库位掩码标识符 MD_DIRBROW_ENABLED
/// 十进制值 2147483648
/// 十六进制值 0x80000000
/// </summary>
public bool EnableDirBrowsing = false;
private Int64 EnableDirBrowsingValue = 0x00000000;
private Int64[] DirBrowseFlagsValueCollections = new Int64[9] ...{ 2, 4, 8, 16, 32, 1073741824, 2147483648, -1073741824, -2147483648 };
/**//// <summary>
/// 转换为ADSI可接受的值
/// </summary>
/// <returns></returns>
public Int64 Value()
...{
Int64 returnValue = 0;
if (DirBrowseShowDate) DirBrowseShowDateValue = 0x00000002;
if (DirBrowseShowTime) DirBrowseShowTimeValue = 0x00000004;
if (DirBrowseShowSize) DirBrowseShowSizeValue = 0x00000008;
if (DirBrowseShowExtension) DirBrowseShowExtensionValue = 0x00000010;
if (DirBrowseShowLongDate) DirBrowseShowLongDateValue = 0x00000020;
//如果启用默认文档,值为负数
if (EnableDefaultDoc)
...{
EnableDefaultDocValue = -0x40000000;
EnableDirBrowsingValue = 0x00000000;
}
//如果启用浏览,EnableDefaultDoc 值不可用,并且为负值
if (EnableDirBrowsing)
...{
EnableDefaultDocValue = 0x00000000;
EnableDirBrowsingValue = -0x80000000;
}
//如果EnableDirBrowsing和EnableDefaultDoc同时启用
if (EnableDirBrowsing && EnableDefaultDoc)
...{
EnableDefaultDocValue = -0x40000000;
EnableDirBrowsingValue = 0x00000000;
}
//如果EnableDirBrowsing为Flase,EnableDefaultDoc为True
if (!EnableDirBrowsing && EnableDefaultDoc)
...{
EnableDefaultDocValue = 0x40000000;
EnableDirBrowsingValue = 0x00000000;
}
returnValue = DirBrowseShowDateValue + DirBrowseShowTimeValue + DirBrowseShowSizeValue +
DirBrowseShowExtensionValue + DirBrowseShowLongDateValue + EnableDefaultDocValue + EnableDirBrowsingValue;
return returnValue;
}
/**//// <summary>
/// 转换为自定义的DirBrowseFlags属性
/// </summary>
/// <param name="Value"></param>
/// <returns></returns>
public DirBrowseFlags ValueToProperty(Int64 Value)
...{
ArrayList al = handelFlags.ConvertToDirBrowseFlagsValueArray(Value, this.DirBrowseFlagsValueCollections);
DirBrowseFlags dbf = new DirBrowseFlags();
for (int i = 0; i < al.Count; i++)
...{
switch (Math.Abs(Int64.Parse(al[i].ToString())))
...{
//2, 4, 8, 16, 32, -1073741824, -2147483648
case 2:
dbf.DirBrowseShowDate = true;
dbf.DirBrowseShowDateValue = Math.Abs(Int64.Parse(al[i].ToString()));
break;
case 4:
dbf.DirBrowseShowTime = true;
dbf.DirBrowseShowTimeValue = Math.Abs(Int64.Parse(al[i].ToString()));
break;
case 8:
dbf.DirBrowseShowSize = true;
dbf.DirBrowseShowSizeValue = Math.Abs(Int64.Parse(al[i].ToString()));
break;
case 16:
dbf.DirBrowseShowExtension = true;
dbf.DirBrowseShowExtensionValue = Math.Abs(Int64.Parse(al[i].ToString()));
break;
case 32:
dbf.DirBrowseShowLongDate = true;
dbf.DirBrowseShowLongDateValue = Math.Abs(Int64.Parse(al[i].ToString()));
break;
}
}
if (Value < 0)
...{
if (Value <= -1073741824)
...{
dbf.EnableDirBrowsing = true;
}
else
...{
dbf.EnableDefaultDoc = true;
}
if (Value >= -1073741824 && Value <= 2147483648)
...{
dbf.EnableDirBrowsing = true;
dbf.EnableDefaultDoc = true;
}
}
else
...{
if (Value >= 1073741824)
...{
dbf.EnableDefaultDoc = true;
}
else
...{
dbf.EnableDefaultDoc = false;
}
dbf.EnableDirBrowsing = false;
}
return dbf;
}
}