论文部分内容阅读
摘要:无论是编程爱好者,还是单位的信息管理人员,都希望以人们熟知的windows资源浏览器形式调取远程,为此,本文主要介绍如何利用VB.NET和SHGetFileInfo函数实现其功能。
关键词:VB.NET SHGetFileInfo 远程资源浏览器
1 开发及调试的基本环境
安装windows server 2003服务器一台,工作站若干,其中一台工作安装VS2005,主要用于编写和调试程序。
2 程序涉及对象及基本设置
首先,在VS2005环境下建立一个解决方案文件(mybrow.sln),然后创建一个窗体文件myfrm.vb,然后在窗体上按下面界面放置控件。
其主要控件设置及其功能说明如下表:
3实现各项功能的程序模块
3.1 引用命名空间
Imports System.IO:Imports System.Text:Imports Microsoft
Imports System.Net:Imports System.runtime.interopservices
3.2 定义登录FTP服务器,所需窗体级对象及变量
Private urib As UriBuilder:Private dlyz As NetworkCredential
Private myre As FtpWebRequest:Private pn As String
Private hn As String:Private ph As String:Private un As String
Private pd As String:Private upstr As Stream
3.3 定义连接远程FTP服务器函数
Private Sub loginserver()
Try
urib=New UriBuilder("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"
Catch ex As WebException
MsgBox(ex.Message)
End Try
End Sub
3.4 定义获得Ftp根目录下文件资源函数
Private Sub getroot()
Try
Dim myre As FtpWebResponse=CType(myre.GetResponse, FtpWebResponse)
Dim mystream As Stream=myre.GetResponseStream()
Dim mystrea As StreamReader=New StreamReader(mystream, Encoding.Default)
Dim str As String=mystrea.ReadToEnd()
Dim dirfilestr() As String = Split(str, vbCrLf)
Dim dirfiletmp As String = ""
For Each str1 As String In dirfilestr
If VisualBasic.Left(str1, 1) = "d" Then
dirfiletmp += str1 & vbCrLf
End If
Next
For Each str1 As String In dirfilestr
If VisualBasic.Left(str1, 1) <> "d" Then
dirfiletmp += str1 & vbCrLf
End If
Next
dirfilestr = dirfiletmp.Split(vbCrLf)
With List1
.Items.Clear()
Dim i As Integer = 0
For Each str1 As String In dirfilestr
If str1.Trim.Length = 0 Then Exit For
Dim FDname as string = str1.Substring(55, str1.Length - 55)
Dim FDlng as string = str1.Substring(31, 12)
Dim FDdate as string = str1.Substring(43, 12)
Dim FDxx as string = str1.Substring(0, 10).Trim
If FDname.Trim <> "." And FDname.Trim <> ".." Then
If VisualBasic.Left(FDxx, 1) = "d" Then
Dim it As ListViewItem:it = .Items.Add(FDname)
.Items(i).ImageKey = "dir":it.SubItems.Add("文件夹")
it.SubItems.Add(FDlng):t.SubItems.Add(FDdate)
Else
geticon(FDname, FDlng, FDdate)
End If
i = i + 1
End If
Next
End With
Catch ex As WebException
MsgBox(ex.Message)
End Try
End Sub
3.5 定义获取资源类型图标函数
Private Sub geticon(ByVal fn As String, ByVal flng As String, ByVal fdate As String)
Dim ext As String = Path.GetExtension(fn)
Dim ico As Icon:Dim shfi_small As New shfileinfo
Im1.ImageSize = New System.Drawing.Size(16, 16)
Try
Dim Ltem As ListViewItem
SHGetFileInfo(ext,0,shfi_small, Marshal.SizeOf(shfi_small), SHGFI_SMALLICON Or shgfi_icon Or shgfi_usefileattributes)
ico = Icon.FromHandle(shfi_small.hicon)
Dim keyindex As Integer = Im1.Images.IndexOfKey(ext)
If keyindex<0 Then
Im1.Images.Add(ico):keyindex=Im1.Images.Count-1
Im1.Images.SetKeyName(keyindex, ext)
End If
Ltem = New ListViewItem(fn):LstItem.ImageIndex=keyindex
List1.Items.Add(Ltem):LstItem.SubItems.Add("文件")
Dim filels As Long=flng 1024
Ltem.SubItems.Add(filels.ToString + "KB")
Ltem.SubItems.Add(fdate)
Catch ex As Exception
MsgBox(ex.ToString())
End Try
End Sub
4 登录远程服务器,并获取文件资源
在登录按钮的单击事件中,编写如下语句。
Private Sub B1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B1.Click
hn = T1.Text:pn = “21”
un = T2.Text:pd = T3.Text
ph = "":loginserver():getroot()
End Sub
上述,即为实现其功能代码,爱好者稍加修改即可完成基于网络的资源上传和下载功能,同时敬请各位同行批评指正。
关键词:VB.NET SHGetFileInfo 远程资源浏览器
1 开发及调试的基本环境
安装windows server 2003服务器一台,工作站若干,其中一台工作安装VS2005,主要用于编写和调试程序。
2 程序涉及对象及基本设置
首先,在VS2005环境下建立一个解决方案文件(mybrow.sln),然后创建一个窗体文件myfrm.vb,然后在窗体上按下面界面放置控件。
其主要控件设置及其功能说明如下表:
3实现各项功能的程序模块
3.1 引用命名空间
Imports System.IO:Imports System.Text:Imports Microsoft
Imports System.Net:Imports System.runtime.interopservices
3.2 定义登录FTP服务器,所需窗体级对象及变量
Private urib As UriBuilder:Private dlyz As NetworkCredential
Private myre As FtpWebRequest:Private pn As String
Private hn As String:Private ph As String:Private un As String
Private pd As String:Private upstr As Stream
3.3 定义连接远程FTP服务器函数
Private Sub loginserver()
Try
urib=New UriBuilder("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"
Catch ex As WebException
MsgBox(ex.Message)
End Try
End Sub
3.4 定义获得Ftp根目录下文件资源函数
Private Sub getroot()
Try
Dim myre As FtpWebResponse=CType(myre.GetResponse, FtpWebResponse)
Dim mystream As Stream=myre.GetResponseStream()
Dim mystrea As StreamReader=New StreamReader(mystream, Encoding.Default)
Dim str As String=mystrea.ReadToEnd()
Dim dirfilestr() As String = Split(str, vbCrLf)
Dim dirfiletmp As String = ""
For Each str1 As String In dirfilestr
If VisualBasic.Left(str1, 1) = "d" Then
dirfiletmp += str1 & vbCrLf
End If
Next
For Each str1 As String In dirfilestr
If VisualBasic.Left(str1, 1) <> "d" Then
dirfiletmp += str1 & vbCrLf
End If
Next
dirfilestr = dirfiletmp.Split(vbCrLf)
With List1
.Items.Clear()
Dim i As Integer = 0
For Each str1 As String In dirfilestr
If str1.Trim.Length = 0 Then Exit For
Dim FDname as string = str1.Substring(55, str1.Length - 55)
Dim FDlng as string = str1.Substring(31, 12)
Dim FDdate as string = str1.Substring(43, 12)
Dim FDxx as string = str1.Substring(0, 10).Trim
If FDname.Trim <> "." And FDname.Trim <> ".." Then
If VisualBasic.Left(FDxx, 1) = "d" Then
Dim it As ListViewItem:it = .Items.Add(FDname)
.Items(i).ImageKey = "dir":it.SubItems.Add("文件夹")
it.SubItems.Add(FDlng):t.SubItems.Add(FDdate)
Else
geticon(FDname, FDlng, FDdate)
End If
i = i + 1
End If
Next
End With
Catch ex As WebException
MsgBox(ex.Message)
End Try
End Sub
3.5 定义获取资源类型图标函数
Private Sub geticon(ByVal fn As String, ByVal flng As String, ByVal fdate As String)
Dim ext As String = Path.GetExtension(fn)
Dim ico As Icon:Dim shfi_small As New shfileinfo
Im1.ImageSize = New System.Drawing.Size(16, 16)
Try
Dim Ltem As ListViewItem
SHGetFileInfo(ext,0,shfi_small, Marshal.SizeOf(shfi_small), SHGFI_SMALLICON Or shgfi_icon Or shgfi_usefileattributes)
ico = Icon.FromHandle(shfi_small.hicon)
Dim keyindex As Integer = Im1.Images.IndexOfKey(ext)
If keyindex<0 Then
Im1.Images.Add(ico):keyindex=Im1.Images.Count-1
Im1.Images.SetKeyName(keyindex, ext)
End If
Ltem = New ListViewItem(fn):LstItem.ImageIndex=keyindex
List1.Items.Add(Ltem):LstItem.SubItems.Add("文件")
Dim filels As Long=flng 1024
Ltem.SubItems.Add(filels.ToString + "KB")
Ltem.SubItems.Add(fdate)
Catch ex As Exception
MsgBox(ex.ToString())
End Try
End Sub
4 登录远程服务器,并获取文件资源
在登录按钮的单击事件中,编写如下语句。
Private Sub B1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B1.Click
hn = T1.Text:pn = “21”
un = T2.Text:pd = T3.Text
ph = "":loginserver():getroot()
End Sub
上述,即为实现其功能代码,爱好者稍加修改即可完成基于网络的资源上传和下载功能,同时敬请各位同行批评指正。