日期:2011-04-11  浏览次数:20370 次

最近,分配给我一个项目,这个项目已成功运转,在这个项目中我需要允许我们的用户经由XML和FTP向另一个公司输出它们的数据。在研究了所有的ASP.NET书籍以后,我们发现任何地方都没有FTP方法,并且花费了一些时间在因特网上搜索相关的例子。我弄清楚了那一点。网络没有自产的FTP支持。我开始去信心并且以A.被迫使用一些旧的ASP代码和Com或者B.停止下来并且购买某些部件。

  不过,我最终偶然发现在Microsoft的MSDN中已经发表过处理FTP的一个完整的类。在这个类中的代码有一点冗长,所以对Microsoft的声誉有影响,雇员必须停下来并且将它们砍去。

‘在Visual Basic.NET 2002中进行调用。你会
‘将数据移动8位。在Visual Basic .NET 2002中,你必须
‘这个数乘以2的8次方
‘端口=parts(4)*(2^8)

‘进行调用,并且接着以Visual Basic .NET 2003进行注释当前行。
port = parts(4) << 8


  我们还使用Visual Studio 2002,所以得到这个注释是一件好事。

  为了测试这个类,我建立了默认的FTP网页,以允许匿名用户进行存取。


图1

图2


  之后,通过代码调用是件轻而易举的事。

Dim ftpClient As New clsFTP("localhost", "", "anonymous", "", 80)
If (ftpClient.Login() = True) Then
 ‘创建一个新文件夹
 ftpClient.CreateDirectory("FTPFOLDERNEW")

‘将新的文件夹设置为活动文件夹。
 ftpClient.ChangeDirectory("FTPFOLDERNEW")

‘设置FTP模式

 ftpClient.SetBinaryMode(True)

‘从你的硬盘上上载一个文件到FTP网页
 ftpClient.UploadFile(Server.MapPath("SampleFile.xml"))

‘对上载文件重命名
 ftpClient.RenameFile("SampleFile.xml", "SampleFile_new.xml")

‘删除一个文件
 ftpClient.DeleteFile("SampleFile_new.xml")

‘总是关闭链接,确保没有任何不在使用中的FTP链接
‘检查你是否登录到FTP服务器,并且接着关闭链接
 ftpClient.CloseConnection()
End If


  浏览ASP.NET论坛,我发现对ASP.NET特征的一个论坛,在那里一个用户注释到拥有一个自己的FTP库该是多么地不错呀。保罗.威尔逊,一个ASP的内行,答复到它已开始2.0了。非常明确它是受欢迎的。

  以下是在MSDN文章中找到的对FTP客户端类的完整代码。怎么使用Visual Basic .NET来存取一个文件传输协议网页呢?

‘这个类允许你使用Visual Basic.NET对FTP网页执行直接链接。
‘这个类支持以下FTP命令:
‘-Upload 一个文件
‘-Download一个文件
‘-Create 一个目录
‘-Remove 一个目录
‘-改变目录
‘-Remove 一个文件
‘-Rename 一个文件
‘-Set 远程用户的用户名
‘-Set 远程用户的密码

Imports System
Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Net.Sockets

‘FTP 类

Public Class clsFTP
#Region "Class Variable Declarations"
Private m_sRemoteHost, m_sRemotePath, m_sRemoteUser As String
Private m_sRemotePassword, m_sMess As String
Private m_iRemotePort, m_iBytes As Int32
Private m_objClientSocket As Socket
Private m_iRetValue As Int32
Private m_bLoggedIn As Boolean
Private m_sMes, m_sReply As String

‘设置用户来对FTP服务器读取和写入数据的数据包的大小
‘对下列具体大小

Public Const BLOCK_SIZE = 512
Private m_aBuffer(BLOCK_SIZE) As Byte
Private ASCII As Encoding = Encoding.ASCII
Public flag_bool As Boolean
‘普通变量定义
Private m_sMessageString As String
#End Region

#Region "Class Constructors"

‘Main类的构造器
Public Sub New()
 m_sRemoteHost = "microsoft"
 m_sRemotePath = "."
 m_sRemoteUser = "anonymous"
 m_sRemotePassword = ""
 m_sMessageString = ""
 m_iRemotePort = 21
 m_bLoggedIn = False
End Sub

‘参数化的构造器

Public Sub New(ByVal sRemoteHost As String, _
ByVal sRemotePath As String, _
ByVal sRemoteUser As String, _
ByVal sRemotePassword As String, _
ByVal iRemotePort As Int32)

 m_sRemoteHost = sRemoteHost
 m_sRemotePath = sRemotePath
 m_sRemoteUser = sRemoteUser
 m_sRemotePassword = sRemotePassword
 m_sMessageString = ""
 m_iRemotePort = 21
 m_bLoggedIn = False

End Sub

#End Region

#Region "Public Properties"

‘设置或得到你想链接的FTP服务器的名称

Public Property RemoteHostFTPServer() As String
 ‘得到FTP服务器的名称
 Get
  Return m_sRemoteHost
 End Get

‘设置FTP服务器的名称

 Set(ByVal Value As String)
  m_sRemoteHost = Value
 End Set
End Property