2008年9月3日星期三

vb 文件传输函数

Const Max As Long = 65534 '每次最大传送数据
Dim SendPos As Double '发送数据位置
Dim RecPos As Double '接收数据位置(此二变量可实现断点续传)

'传送文件
Sub SendFile(FileName As String, Wnk As Winsock)
'FileName 预发送的文件.
Static iPoss As Double '当前发送位置
Dim SendData() As Byte '二进制数据
Dim Length As Double '记录文件长度
Dim FileNum As Integer
FileNum = FreeFile '获得文件号
Length = FileLen(FileName) '获得文件长度
Open FileName For Binary As FileNum
DoEvents
If Length <= Max Then
ReDim SendData(1 To Length)
Get FileNum, , SendData
Wnk.SendData SendData
Else
While iPos <= Length - Max
ReDim SendData(1 To Max)
Get FileNum, iPos + 1, SendData
Wnk.SendData SendData
iPos = iPos + Max
Wend
End If
ReDim SendData(Length - iPos - 1) '此处注意要-1,否则不会成功!
Get FileNum, iPos + 1, SendData
Wnk.SendData SendData
Close FileNum
Debug.Print FileLen(FileName)
End Sub
'==============================================================
'==============================================================
Sub ReceiveData(FileName As String, Wnk As Winsock, Lens As Long) '接收数据
'FileName 文件保存的位置
Dim RecData() As Byte
Dim Length As Double
Dim FileNum As Integer
FileNum = FreeFile
Open FileName For Binary As FileNum
Length = FileLen(FileName)
ReDim RecData(1 To Lens)
Wnk.GetData RecData
Put FileNum, Length + 1, RecData
Close FileNum
End Sub

没有评论: