MCI Command 参数

      MCI Command String是多媒体设备的程序接口。通过它,我们可以打开一个多媒体文件,例如mp3,VCD,Mpeg4格式的文件等等,并对它进行播放,暂停,关闭等操作。

      Command String的使用方法:

      MCI Command String是通过mciExecute或mciSendString两个函数执行的。这两个函数的声明如下:

      Private Declare Function mciExecute Lib “winmm.dll” Alias “mciExecute” (ByVal lpstrCommand As String) As Long

      Private Declare Function mciSendString Lib “winmm.dll” Alias “mciSendStringA” (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

      这两个函数都有一个叫lpstrCommand的参数, 这个参数就是我们今天要介绍的MCI Command String。其中函数mciSendString还有三个参数,lpstrReturnString是一个字符串,它用来接收mciSendString函数返回的信息(例如,我们在lpstrCommand中的命令是让函数返回打开的文件的设备类型,那么函数就把设备类型的信息保存在lpstrReturnString参数中。);uReturnLength参数用来指定参数lpstrReturnString的长度;hwndCallback是接收“wait”、“notify”消息的窗口句柄,在Visual Basic中调用时该参数设为0即可。

      如果命令执行出错,函数mciExecute会直接弹出一个对话框,提示出错的原因。而mciSendString函数会返回一个ErrorCode(错误代码),该代码的具体含义您可以参考MSDN中的目录“Platform SDK\Graphics and Multimedia Services\Windows Multimedia\Multimedia Reference\Multimedia Constants\MCIERR Return Values”。您可以根据具体情况选择到底使用哪一个函数来执行MCI命令。例如,在调试的时候使用mciExecute,以便快速地获得错误原因,而在将要发布的程序中使用mciSendString函数,让程序中已设置的错误陷阱去处理错误,以避免频繁的错误提示而使用户觉得厌烦。(对于有返回值的MCI命令,必须使用mciSendString函数。)

      在熟悉了这两个函数后,我们就可以进入正题――MCI Command String了。

      MCI Command String的命令格式是这样的:lpszCommand lpszDevice lpszCommandFlag lpazFlag

      lpszCommand是mci命令,例如open,play,stop,close等等。

      lpszDevice是设备名(或文件名)。例如,我们用以下的程序打开了我的文档中的Music01.dat文件,并用“alias”参数将其别名设为OpenFile:

      dim lReturn as long   (1)

      lReturn=mciExecute(“open C:\Mydocu~1\Music01.dat alias OpenFile type MPEGVideo”)      (2)

      那么,在以后的MCI Command String中lpszDevice参数必须指定为OpenFile。例如,关闭该文件的代码如下:

      lReturn=mciExecute(“close OpenFile”)              (3)

      如果我们没有为打开的文件设定别名,则以后调用的MCI Command String中lpszDevice参数为DOS路径名加文件名。例子如下:

      dim lReturn as long                            (4)

      lReturn=mciExecute(“open C:\Mydocu~1\Music01.dat type MPEGVideo”)    (5)

      lReturn=mciExecute(“close C:\Mydocu~1\Music01.dat type MPEGVideo”)    (6)

      从这里可以看出,设定别名的好处是减少了代码的输入。

      LpszCommandFlag是mci命令的参数。如上代码(2),“alias OpenFile”以及“type MPEGVideo”就是命令“open”的参数。通常一个mci命令的参数少则几个多则几十个。

      LpazFlag可以为指定为“wait”或“notity”。如果为“wait”,那么mci命令执行完毕后会向父窗体发送MCI_WAIT消息,“notity”则发送MCI_NOTIFY消息。此参数在Visual Basic中无甚用处。

      在此先声明一下,微软提供的winmm.dll函数库支持的多媒体设备的类型共有cdaudio,dat,digitalvideo,other,overlay,scanner,sequencer,vcr,videodisc,waveaudio十种(注意:winmm.dll函数库不支持RealPlay格式的文件。您可以用以下代码获得已打开的文件的类型:lReturn=mciSendString(“capability lpszDevice device type”,sReturn,32,0) )。至于哪一类设备支持哪些参数,您可以在MSDN中查找关键字“MCI Command Strings”,选中所列出的命令,在其中的HTML帮助文档中通常会有一个表格告诉你哪些设备支持哪些参数或者在第一段中有信息告诉您哪些设备支持该命令。

      mci命令参数介绍:

      open:该命令用来打开一个多媒体文件。所有的设备都支持这个命令。在任何mci命令执行前,都必须先使用该命令打开多媒体文件,以初始化设备。

      该命令的几个参数意义如下:alias device_alias――指定欲打开文件的别名;shareable――是否以共享方式打开,如果不指定该参数,则以不共享的方式打开,也就是说,打开某一个多媒体文件后,其它程序不能再打开它,如果指定该参数,则以共享方式打开;type device_type――指定该文件在Windows中注册的多媒体文件名(注:Windows中注册的多媒体文件名与设备类型名并不相同,设备类型只有以上所说的十种类型。RealPlay格式的音视频流是第三方公司开发的媒体类型,不属于Microsoft Windows支持的设备。而Windows中注册的多媒体文件名请查看C:\Windows\win.ini文件的[mci extensions]小节。),如MPEGVideo,AVIVideo,waveaudio等,MPEGVideo、AVIVideo类型的文件其实都属于设备digitalvideo。

      对于open命令,有几个须注意的方面。首先,用open命令打开一个文件时,文件的路径必须是DOS格式的短路径。您可以用API函数GetShortPathName返回某路径的该格式。对于参数type device_type,复合型设备的文件(如:MPEGVideo)mci设备会自动根据其在Windows中注册的扩展名(要想获得某扩展名的文件在Windows中注册的类型名,请查看C:\Windows\win.ini文件的[mci extensions]小节)设置该参数(所以对于C:\Windows\win.ini文件的[mci extensions]小节中已列的扩展名,不必指定该参数),但如果设备无法根据其扩展名获得文件的类型的话,就必须指定该参数,如果不指定则会提示:“这不是已注册的mci设备“,而简单型设备(如CD音轨设备,可编程控制的录放像机,可编程控制的镭射影碟机)则不必指定该参数。

      如果该命令被成功执行,那么返回值为0。至此,您就可以用alias指定的别名执行各种各样的mci命令了。

      (限于篇幅,每个命令具体的参数与MCI设备的支持情况请参照MSDN。)

      (参数中的黑体字表示这是一个MCI命令,斜体字表示该单词所表示的是MCI参数的变量,必须由开发者指定。)

      Break:指定一个键来退出使用wait参数的当前mci命令。这是一个MCI系统命令,所有MCI设备都支持这个命令。

      on virtual_ key_ code: 指定一个键用来退出含有wait参数的命令。

      off: 使当前break键无效。

      Capability:获得已打开的设备的功能,比如能否播放,能否退出,能否记录等等。所有MCI设备都支持这个命令。

      can detect length:如果设备能侦测长度则返回TRUE

      can eject:如果设备能弹出则返回TRUE

      can freeze:如果设备支持冻结数据则返回TRUE

      can lock:如果设备支持锁定数据则返回TRUE

      can monitor sources:如果设备能将一个输入源输出到指定的输出源则返回TRUE,与当前的输入源无关

      can play:如果设备能播放则返回TRUE

      can preroll:如果设备在cue命令中支持preroll参数则返回TRUE

      can preview:如果设备能向前快放则返回TRUE

      can record:如果设备支持记录则返回TRUE

      can reverse:如果设备能后退则返回TRUE

      can save:如果设备能保存数据则返回TRUE

      can stretch:如果设备能缩放输出的图像则返回TRUE

      can stretch input:如果设备能在数据流解压到帧缓冲的同时能缩放输出的图像则返回TRUE

      can test:如果设备能识别“test“关键字则返回TRUE

      cav:当与其它项组合使用时,该参数返回申请CAV格式时,videodiscs设备的返回信息,如果没有插入任何videodiscs该参数为默认值

      clock increment rate:返回外部时钟将每秒钟分为几个单位,如millisecond返回1000,0表示没有支持的外部时钟

      clv:当与其它项组合使用时,该参数返回申请CLV格式时,videodiscs设备的返回信息

      compound device:设备支持文件名时返回TRUE

      device type:返回设备类型名,其值可以如下:

               cdaudio

               dat

               digitalvideo

               other

               overlay

               scanner

               sequencer

               vcr

               videodisc

               waveaudio

      fast play rate:返回每秒快放的帧数,如果为0则不支持快放

      has audio:如果设备支持音频则返回TRUE

      has clock:如果设备支持时钟则返回TRUE

      has still:如果设备将文件视为一静态图像比动态视频文件更快则返回TRUE

      has timecode:如果设备支持timecode则返回TRUE

      has video:如果设备支持视频则返回TRUE

      inputs:返回输入设备的总数

      maximum play rate:返回最快的播放速度,单位为帧每秒

      minimum play rate:返回最慢的播放速度,单位为帧每秒

      normal play rate:返回正常的播放速度,单位为帧每秒

Windows 消息定义(2)

WM_INPUT = 0x00FF,

WM_KEYFIRST = 0x0100,

WM_KEYDOWN = 0x0100,

WM_KEYUP = 0x0101,

WM_CHAR = 0x0102,

WM_DEADCHAR = 0x0103,

WM_SYSKEYDOWN = 0x0104,

WM_SYSKEYUP = 0x0105,

WM_SYSCHAR = 0x0106,

WM_SYSDEADCHAR = 0x0107,

WM_UNICHAR = 0x0109,

WM_KEYLAST_NT501 = 0x0109,

UNICODE_NOCHAR = 0xFFFF,

WM_KEYLAST_PRE501 = 0x0108,

WM_IME_STARTCOMPOSITION = 0x010D,

WM_IME_ENDCOMPOSITION = 0x010E,

WM_IME_COMPOSITION = 0x010F,

WM_IME_KEYLAST = 0x010F,

WM_INITDIALOG = 0x0110,

WM_COMMAND = 0x0111,

WM_SYSCOMMAND = 0x0112,

WM_TIMER = 0x0113,

WM_HSCROLL = 0x0114,

WM_VSCROLL = 0x0115,

WM_INITMENU = 0x0116,

WM_INITMENUPOPUP = 0x0117,

WM_MENUSELECT = 0x011F,

WM_MENUCHAR = 0x0120,

WM_ENTERIDLE = 0x0121,

WM_MENURBUTTONUP = 0x0122,

WM_MENUDRAG = 0x0123,

WM_MENUGETOBJECT = 0x0124,

WM_UNINITMENUPOPUP = 0x0125,

WM_MENUCOMMAND = 0x0126,

WM_CHANGEUISTATE = 0x0127,

WM_UPDATEUISTATE = 0x0128,

WM_QUERYUISTATE = 0x0129,

WM_CTLCOLORMSGBOX = 0x0132,

WM_CTLCOLOREDIT = 0x0133,

WM_CTLCOLORLISTBOX = 0x0134,

WM_CTLCOLORBTN = 0x0135,

WM_CTLCOLORDLG = 0x0136,

WM_CTLCOLORSCROLLBAR = 0x0137,

WM_CTLCOLORSTATIC = 0x0138,

WM_MOUSEFIRST = 0x0200,

WM_MOUSEMOVE = 0x0200,

WM_LBUTTONDOWN = 0x0201,

WM_LBUTTONUP = 0x0202,

WM_LBUTTONDBLCLK = 0x0203,

WM_RBUTTONDOWN = 0x0204,

WM_RBUTTONUP = 0x0205,

WM_RBUTTONDBLCLK = 0x0206,

WM_MBUTTONDOWN = 0x0207,

WM_MBUTTONUP = 0x0208,

WM_MBUTTONDBLCLK = 0x0209,

WM_MOUSEWHEEL = 0x020A,

WM_XBUTTONDOWN = 0x020B,

WM_XBUTTONUP = 0x020C,

WM_XBUTTONDBLCLK = 0x020D,

WM_MOUSELAST_5 = 0x020D,

WM_MOUSELAST_4 = 0x020A,

WM_MOUSELAST_PRE_4 = 0x0209,

WM_PARENTNOTIFY = 0x0210,

WM_ENTERMENULOOP = 0x0211,

WM_EXITMENULOOP = 0x0212,

WM_NEXTMENU = 0x0213,

WM_SIZING = 0x0214,

WM_CAPTURECHANGED = 0x0215,

WM_MOVING = 0x0216,

WM_POWERBROADCAST = 0x0218,

WM_DEVICECHANGE = 0x0219,

WM_MDICREATE = 0x0220,

WM_MDIDESTROY = 0x0221,

WM_MDIACTIVATE = 0x0222,

WM_MDIRESTORE = 0x0223,

WM_MDINEXT = 0x0224,

WM_MDIMAXIMIZE = 0x0225,

WM_MDITILE = 0x0226,

WM_MDICASCADE = 0x0227,

WM_MDIICONARRANGE = 0x0228,

WM_MDIGETACTIVE = 0x0229,

WM_MDISETMENU = 0x0230,

Windows 消息定义(1)

SendMessage(句柄,消息,参数1,参数2) “消息的内容”说明。左边是消息,右边是十六位的ID,要转换为10进制后才可以给E用。

比如 SendMessage(文本框的句柄,13,256,一个初始化的容器),作用就是获取文本框的内容到一个初始化的容器内。

其中的13就是 WM_GETTEXT = 0x000D。000D=13,明白?

消息的名称前面两个或三个字母是表明所对应的类或者控件类型,比如WM、EM、LB、CB、TB等。

WM_NULL = 0x0000,

WM_CREATE = 0x0001,

WM_DESTROY = 0x0002,

WM_MOVE = 0x0003,

WM_SIZE = 0x0005,

WM_ACTIVATE = 0x0006,

WM_SETFOCUS = 0x0007,

WM_KILLFOCUS = 0x0008,

WM_ENABLE = 0x000A,

WM_SETREDRAW = 0x000B,

WM_SETTEXT = 0x000C,

WM_GETTEXT = 0x000D,

WM_GETTEXTLENGTH = 0x000E,

WM_PAINT = 0x000F,

WM_CLOSE = 0x0010,

WM_QUERYENDSESSION = 0x0011,

WM_QUERYOPEN = 0x0013,

WM_ENDSESSION = 0x0016,

WM_QUIT = 0x0012,

WM_ERASEBKGND = 0x0014,

WM_SYSCOLORCHANGE = 0x0015,

WM_SHOWWINDOW = 0x0018,

WM_WININICHANGE = 0x001A,

WM_SETTINGCHANGE = 0x001A,

WM_DEVMODECHANGE = 0x001B,

WM_ACTIVATEAPP = 0x001C,

WM_FONTCHANGE = 0x001D,

WM_TIMECHANGE = 0x001E,

WM_CANCELMODE = 0x001F,

WM_SETCURSOR = 0x0020,

WM_MOUSEACTIVATE = 0x0021,

WM_CHILDACTIVATE = 0x0022,

WM_QUEUESYNC = 0x0023,

WM_GETMINMAXINFO = 0x0024,

WM_PAINTICON = 0x0026,

WM_ICONERASEBKGND = 0x0027,

WM_NEXTDLGCTL = 0x0028,

WM_SPOOLERSTATUS = 0x002A,

WM_DRAWITEM = 0x002B,

WM_MEASUREITEM = 0x002C,

WM_DELETEITEM = 0x002D,

WM_VKEYTOITEM = 0x002E,

WM_CHARTOITEM = 0x002F,

WM_SETFONT = 0x0030,

WM_GETFONT = 0x0031,

WM_SETHOTKEY = 0x0032,

WM_GETHOTKEY = 0x0033,

WM_QUERYDRAGICON = 0x0037,

WM_COMPAREITEM = 0x0039,

WM_GETOBJECT = 0x003D,

WM_COMPACTING = 0x0041,

WM_COMMNOTIFY = 0x0044,

WM_WINDOWPOSCHANGING = 0x0046,

WM_WINDOWPOSCHANGED = 0x0047,

WM_POWER = 0x0048,

WM_COPYDATA = 0x004A,

WM_CANCELJOURNAL = 0x004B,

WM_NOTIFY = 0x004E,

WM_INPUTLANGCHANGEREQUEST = 0x0050,

WM_INPUTLANGCHANGE = 0x0051,

WM_TCARD = 0x0052,

WM_HELP = 0x0053,

WM_USERCHANGED = 0x0054,

WM_NOTIFYFORMAT = 0x0055,

WM_CONTEXTMENU = 0x007B,

WM_STYLECHANGING = 0x007C,

WM_STYLECHANGED = 0x007D,

WM_DISPLAYCHANGE = 0x007E,

WM_GETICON = 0x007F,

WM_SETICON = 0x0080,

WM_NCCREATE = 0x0081,

WM_NCDESTROY = 0x0082,

WM_NCCALCSIZE = 0x0083,

WM_NCHITTEST = 0x0084,

WM_NCPAINT = 0x0085,

WM_NCACTIVATE = 0x0086,

WM_GETDLGCODE = 0x0087,

WM_SYNCPAINT = 0x0088,

WM_NCMOUSEMOVE = 0x00A0,

WM_NCLBUTTONDOWN = 0x00A1,

WM_NCLBUTTONUP = 0x00A2,

WM_NCLBUTTONDBLCLK = 0x00A3,

WM_NCRBUTTONDOWN = 0x00A4,

WM_NCRBUTTONUP = 0x00A5,

WM_NCRBUTTONDBLCLK = 0x00A6,

WM_NCMBUTTONDOWN = 0x00A7,

WM_NCMBUTTONUP = 0x00A8,

WM_NCMBUTTONDBLCLK = 0x00A9,

WM_NCXBUTTONDOWN = 0x00AB,

WM_NCXBUTTONUP = 0x00AC,

WM_NCXBUTTONDBLCLK = 0x00AD,

ASP FileSystemObject 对象模型

零、FileSystemObject 对象模型的对象

对象

对象描述
FileSystemObject主对象,提供创建、删除及访问其他对象的方法(如CreateFolder、GetDrive等)。
Drive表示物理或网络驱动器(如硬盘、CD-ROM),提供容量、可用空间、类型等信息收集功能。
Folder用于文件夹的创建、删除、移动及路径查询(如SubFolders属性可遍历子文件夹)。
File对应单个文件,支持读写、复制等操作,与Folder对象方法类似但目标不同。
TextStream专用于文本文件的读写操作(不支持二进制文件,需使用Open命令处理)。
Dictionary用于组织数据结构。一个字典中有多个元素,每个元素都由两部分组成,一个叫键(key),一个叫项(item)。 键相当于是这个元素独一无二的标识,就像一个词典里的每个词条都只会出现一次,所以键是不会重复的。项就是这个元素的内容,内容可以任意改变,所以项是可以重复的。

一、FileSystemObject 对象的属性和方法

属性

属性描述
Drives返回本地计算机上所有驱动器对象的集合。

方法

方法描述
BuildPath将一个名称追加到已有的路径后
CopyFile从一个位置向另一个位置拷贝一个或多个文件。
CopyFolder从一个位置向另一个位置拷贝一个或多个文件夹。
CreateFolder创建新文件夹。
CreateTextFile创建文本文件,并返回一个 TextStream 对象。
DeleteFile删除一个或者多个指定的文件。
DeleteFolder删除一个或者多个指定的文件夹。
DriveExists检查指定的驱动器是否存在。
FileExists检查指定的文件是否存在。
FolderExists检查某个文件夹是否存在。
GetAbsolutePathName针对指定的路径返回从驱动器根部起始的完整路径。
GetBaseName返回指定文件或者文件夹的基名称。
GetDrive返回指定路径中所对应的驱动器的 Drive 对象。
GetDriveName返回指定的路径的驱动器名称。
GetExtensionName返回在指定的路径中最后一个成分的文件扩展名。
GetFile返回一个针对指定路径的 File 对象。
GetFileName返回在指定的路径中最后一个成分的文件名。
GetFolder返回一个针对指定路径的 Folder 对象。
GetParentFolderName返回在指定的路径中最后一个成分的父文件名称。
GetSpecialFolder返回某些 Windows 的特殊文件夹的路径。
GetTempName返回一个随机生成的文件或文件夹。
MoveFile从一个位置向另一个位置移动一个或多个文件。
MoveFolder从一个位置向另一个位置移动一个或多个文件夹。
OpenTextFile打开文件,并返回一个用于访问此文件的 TextStream 对象。

二、Drive 对象的属性

属性描述
AvailableSpace向用户返回在指定的驱动器或网络共享驱动器上的可用空间容量。
DriveLetter返回识别本地驱动器或网络共享驱动器的大写字母。
DriveType返回指定驱动器的类型。
FileSystem返回指定驱动器所使用的文件系统类型。
FreeSpace向用户返回在指定的驱动器或网络共享驱动器上的剩余空间容量。
IsReady如果指定驱动器已就绪,则返回 true。否则返回 false。
Path返回其后有一个冒号的大写字母,用来指示指定驱动器的路径名。
RootFolder返回一个文件夹对象,该文件夹代表指定驱动器的根文件夹。
SerialNumber返回指定驱动器的序列号。
ShareName返回指定驱动器的网络共享名。
TotalSize返回指定的驱动器或网络共享驱动器的总容量
VolumeName设置或者返回指定驱动器的卷标名

三、Folder 对象的集合、属性以及方法

集合

集合描述
Files返回指定文件夹中所有文件夹的集合。
SubFolders返回指定文件夹中所有子文件夹的集合。

属性

属性描述
Attributes设置或返回指定文件夹的属性。
DateCreated返回指定文件夹被创建的日期和时间。
DateLastAccessed返回指定文件夹最后被访问的日期和时间。
DateLastModified返回指定文件夹最后被修改的日期和时间。
Drive返回指定文件夹所在的驱动器的驱动器字母。
IsRootFolder假如文件夹是根文件夹,则返回 ture,否则返回 false。
Name设置或返回指定文件夹的名称。
ParentFolder返回指定文件夹的父文件夹。
Path返回指定文件的路径。
ShortName返回指定文件夹的短名称。(8.3 命名约定)
ShortPath返回指定文件夹的短路径。(8.3 命名约定)
Size返回指定文件夹的大小。
Type返回指定文件夹的类型。

方法

方法描述
Copy把指定的文件夹从一个位置拷贝到另一个位置。
Delete删除指定文件夹。
Move把指定的文件夹从一个位置移动到另一个位置。
CreateTextFile在指定的文件夹创建一个新的文本文件,并返回一个 TextStream 对象以访问这个文件。

四、File 对象的属性和方法

属性

属性描述
Attributes设置或返回指定文件的属性。
DateCreated返回指定文件创建的日期和时间。
DateLastAccessed返回指定文件最后被访问的日期和时间。
DateLastModified返回指定文件最后被修改的日期和时间。
Drive返回指定文件或文件夹所在的驱动器的驱动器字母。
Name设置或返回指定文件的名称。
ParentFolder返回指定文件或文件夹的父文件夹对象。
Path返回指定文件的路径。
ShortName返回指定文件的短名称(8.3 命名约定)。
ShortPath返回指定文件的短路径(8.3 命名约定)。
Size返回指定文件的尺寸(字节)。
Type返回指定文件的类型。

方法

方法描述
Copy把指定文件从一个位置拷贝到另一个位置。
Delete删除指定文件。
Move把指定文件从一个位置移动到另一个位置。
OpenAsTextStream打开指定文件,并返回一个 TextStream 对象以便访问此文件。

五、TextStream 对象的属性和方法

属性

属性描述
AtEndOfLine在 TextStream 文件中,如果文件指针正好位于行尾标记的前面,那么该属性值返回 True;否则返回 False。
AtEndOfStream如果文件指针在 TextStream 文件末尾,则该属性值返回 True;否则返回 False。
Column返回 TextStream 文件中当前字符位置的列号。
Line返回 TextStream 文件中的当前行号。

方法

方法描述
Close关闭一个打开的 TextStream 文件。
Read从一个 TextStream 文件中读取指定数量的字符并返回结果(得到的字符串)。
ReadAll读取整个 TextStream 文件并返回结果。
ReadLine从一个 TextStream 文件读取一整行(到换行符但不包括换行符)并返回结果。
Skip当读一个 TextStream 文件时跳过指定数量的字符。
SkipLine当读一个 TextStream 文件时跳过下一行。
Write写一段指定的文本(字符串)到一个 TextStream 文件。
WriteLine写入一段指定的文本(字符串)和换行符到一个 TextStream 文件中。
WriteBlankLines写入指定数量的换行符到一个 TextStream 文件中。

六、Dictionary 对象的属性和方法

属性

属性描述
CompareMode设置或返回用于在 Dictionary 对象中比较键的比较模式。
Count返回 Dictionary 对象中键/项目对的数目。
Item设置或返回 Dictionary 对象中一个项目的值。
Key为 Dictionary 对象中已有的键值设置新的键值。

方法

方法描述
Add向 Dictionary 对象添加新的键/项目对。
Exists返回一个逻辑值,这个值可指示指定的键是否存在于 Dictionary 对象中。
Items返回 Dictionary 对象中所有项目的一个数组。
Keys返回 Dictionary 对象中所有键的一个数组。
Remove从 Dictionary 对象中删除指定的键/项目对。
RemoveAll删除 Dictionary 对象中所有的键/项目对。

FTP的主动模式与被动模式

在PORT(主动模式)下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,发送FTP用户名和密码,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令,告诉服务端客户端采用主动模式并开放了端口。FTP服务器接收到PORT命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。

在PASV(被动模式)下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,发送用户名和密码进行登陆,同时会开启N+1端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P(端口P的范围是可以设置的,后面会说到这个是很重要的)进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。