利用VB.NET与SHGetFileInfo制作远程资源浏览器

(整期优先)网络出版时间:2010-04-14
/ 2

利用VB.NET与SHGetFileInfo制作远程资源浏览器

安国有

安国有(松原职业技术学院)

摘要:无论是编程爱好者,还是单位的信息管理人员,都希望以人们熟知的windows资源浏览器形式调取远程,为此,本文主要介绍如何利用VB.NET和SHGetFileInfo函数实现其功能。

关键词:VB.NETSHGetFileInfo远程资源浏览器

1开发及调试的基本环境

安装windowsserver2003服务器一台,工作站若干,其中一台工作安装VS2005,主要用于编写和调试程序。

2程序涉及对象及基本设置

首先,在VS2005环境下建立一个解决方案文件(mybrow.sln),然后创建一个窗体文件myfrm.vb,然后在窗体上按下面界面放置控件。

其主要控件设置及其功能说明如下表:

3实现各项功能的程序模块

3.1引用命名空间

ImportsSystem.IO:ImportsSystem.Text:ImportsMicrosoft

ImportsSystem.Net:ImportsSystem.runtime.interopservices

3.2定义登录FTP服务器,所需窗体级对象及变量

PrivateuribAsUriBuilder:PrivatedlyzAsNetworkCredential

PrivatemyreAsFtpWebRequest:PrivatepnAsString

PrivatehnAsString:PrivatephAsString:PrivateunAsString

PrivatepdAsString:PrivateupstrAsStream

3.3定义连接远程FTP服务器函数

PrivateSubloginserver()

Try

urib=NewUriBuilder("ftp",hn,Integer.Parse(pnumber),ph)

myre=CType(FtpWebRequest.Create(urib.Uri),FtpWebRequest)

dlyz=NewNetworkCredential(un,pd):myre.Credentials=dlyz

myre.KeepAlive=False:myre.Method="list"

CatchexAsWebException

MsgBox(ex.Message)

EndTry

EndSub

3.4定义获得Ftp根目录下文件资源函数

PrivateSubgetroot()

Try

DimmyreAsFtpWebResponse=CType(myre.GetResponse,FtpWebResponse)

DimmystreamAsStream=myre.GetResponseStream()

DimmystreaAsStreamReader=NewStreamReader(mystream,Encoding.Default)

DimstrAsString=mystrea.ReadToEnd()

Dimdirfilestr()AsString=Split(str,vbCrLf)

DimdirfiletmpAsString=""

ForEachstr1AsStringIndirfilestr

IfVisualBasic.Left(str1,1)="d"Then

dirfiletmp+=str1&vbCrLf

EndIf

Next

ForEachstr1AsStringIndirfilestr

IfVisualBasic.Left(str1,1)<>"d"Then

dirfiletmp+=str1&vbCrLf

EndIf

Next

dirfilestr=dirfiletmp.Split(vbCrLf)

WithList1

.Items.Clear()

DimiAsInteger=0

ForEachstr1AsStringIndirfilestr

Ifstr1.Trim.Length=0ThenExitFor

DimFDnameasstring=str1.Substring(55,str1.Length-55)

DimFDlngasstring=str1.Substring(31,12)

DimFDdateasstring=str1.Substring(43,12)

DimFDxxasstring=str1.Substring(0,10).Trim

IfFDname.Trim<>"."AndFDname.Trim<>".."Then

IfVisualBasic.Left(FDxx,1)="d"Then

DimitAsListViewItem:it=.Items.Add(FDname)

.Items(i).ImageKey="dir":it.SubItems.Add("文件夹")

it.SubItems.Add(FDlng):t.SubItems.Add(FDdate)

Else

geticon(FDname,FDlng,FDdate)

EndIf

i=i+1

EndIf

Next

EndWith

CatchexAsWebException

MsgBox(ex.Message)

EndTry

EndSub

3.5定义获取资源类型图标函数

PrivateSubgeticon(ByValfnAsString,ByValflngAsString,ByValfdateAsString)

DimextAsString=Path.GetExtension(fn)

DimicoAsIcon:Dimshfi_smallAsNewshfileinfo

Im1.ImageSize=NewSystem.Drawing.Size(16,16)

Try

DimLtemAsListViewItem

SHGetFileInfo(ext,0,shfi_small,Marshal.SizeOf(shfi_small),SHGFI_SMALLICONOrshgfi_iconOrshgfi_usefileattributes)

ico=Icon.FromHandle(shfi_small.hicon)

DimkeyindexAsInteger=Im1.Images.IndexOfKey(ext)

Ifkeyindex<0Then

Im1.Images.Add(ico):keyindex=Im1.Images.Count-1

Im1.Images.SetKeyName(keyindex,ext)

EndIf

Ltem=NewListViewItem(fn):LstItem.ImageIndex=keyindex

List1.Items.Add(Ltem):LstItem.SubItems.Add("文件")

DimfilelsAsLong=flng\1024

Ltem.SubItems.Add(filels.ToString+"KB")

Ltem.SubItems.Add(fdate)

CatchexAsException

MsgBox(ex.ToString())

EndTry

EndSub

4登录远程服务器,并获取文件资源

在登录按钮的单击事件中,编写如下语句。

PrivateSubB1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesB1.Click

hn=T1.Text:pn=“21”

un=T2.Text:pd=T3.Text

ph="":loginserver():getroot()

EndSub

上述,即为实现其功能代码,爱好者稍加修改即可完成基于网络的资源上传和下载功能,同时敬请各位同行批评指正。