分享
 
 
 

利用remoting实现文件传输

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

因为工作需要写了一个文件传输的东东

使用了System.Runtime.Remoting

客户端接口类:

Namespace Nail.Net.Remoting.Trans

Public Interface iTransFile

Function SendFile(ByVal FileName As String, ByVal bytes() As Byte, ByVal ClientCrc As Integer) As Integer

Function CompareFile(ByVal FileName As String, ByVal ClientCrc As Integer) As Boolean

Function GetFileDet(ByVal FileName As String) As Integer

Function GetFileInfo(ByVal FileName As String) As Byte()

Function GetFileInfo(ByVal FileName As String, ByVal Length As Integer) As Byte()

Function GetFileInfo(ByVal FileName As String, ByVal Point As Integer, ByVal Length As Integer) As Byte()

Property ServerTransSaveFilePath() As String

Property ServerTempFilePath() As String

End Interface

End Namespace

客户端类:(文件传输的实现在此)(包含1个窗体 后面窗体代码我会贴出来)(请添加引用System.Runtime.Remoting .net默认是不引用的 服务器端类同样)

Imports System.Runtime

Imports System.Runtime.Remoting

Imports System.Runtime.Remoting.Channels

Imports System.Runtime.Remoting.Channels.Tcp

Imports System.IO

Imports System.Threading

Namespace Nail.Net.Remoting.Client

Public Class FileTransClient

Private TransTempSize As Integer

Private TransType As TrType

Private TransPort As Integer

Private TransServerClassName As String

Private TransServerIpAdr As String

Private TransCRC32 As Integer

Private Tsc As Nail.Net.Remoting.Trans.iTransFile

Private Senconds As Integer = 10

Private WithEvents Timer1 As New System.Windows.Forms.Timer

Private NewTransForm As FrmTransfersUI

Private TransFileName As String

'文件全路径

Public Property FullFileName() As String

Get

Return TransFileName

End Get

Set(ByVal Value As String)

TransFileName = Value

End Set

End Property

'缓存属性

Public Property TempSize() As Integer

Get

Return TempSize

End Get

Set(ByVal Value As Integer)

Me.TransTempSize = Value

End Set

End Property

'端口属性

Public Property Port() As Integer

Get

Return Port

End Get

Set(ByVal Value As Integer)

Me.TransPort = Value

End Set

End Property

'服务器端服务名属性

Public Property ServerClassName() As String

Get

Return ServerClassName

End Get

Set(ByVal Value As String)

Me.TransServerClassName = Value

End Set

End Property

'服务器端IP地址属性

Public Property ServerIpAdr() As String

Get

Return ServerIpAdr()

End Get

Set(ByVal Value As String)

Me.TransServerIpAdr = Value

End Set

End Property

'枚举传输类型

Enum TrType

TCP = 1

HTTP = 2

End Enum

'传输类别属性

Public Property Type() As TrType

Get

Return TransType

End Get

Set(ByVal Value As TrType)

Me.TransType = Value

End Set

End Property

'连接服务器

Public Sub ConnetServer()

Try

Select Case TransType

Case TrType.TCP

Tsc = Activator.GetObject(GetType(Nail.Net.Remoting.Trans.iTransFile), "tcp://" & TransServerIpAdr & ":" & TransPort & "/" & TransServerClassName)

Case TrType.HTTP

Tsc = Activator.GetObject(GetType(Nail.Net.Remoting.Trans.iTransFile), "http://" & TransServerIpAdr & ":" & TransPort & "/" & TransServerClassName)

End Select

Catch ex As Exception

MsgBox(ex.ToString)

End Try

End Sub

Public Function CheckFileInfo(ByVal FileName As String) As Integer

Dim crc As New Nail.FileTools.clsCrc32

Return crc.CalcuateFile(FileName)

End Function

Public Sub SendFile()

ShowUI()

Timer1.Interval = 10

Timer1.Start()

Dim SendThead As New Thread(AddressOf SendFileToServer)

SendThead.Start()

End Sub

'发送文件方法

Private Sub SendFileToServer()

Dim Crc As Integer = CheckFileInfo(TransFileName)

Dim Fif As New FileInfo(TransFileName)

Dim FileSm As New FileStream(TransFileName, FileMode.Open, FileAccess.Read, FileShare.Read)

If FileSm.Length = 0 Then

MsgBox("这是个空文件 请选择一个有效文件!")

Exit Sub

End If

Dim bty(TransTempSize - 1) As Byte

Dim Star As Integer = 0

Dim i As Long

NewTransForm.MaxOfProgress = FileSm.Length '进度条总量

NewTransForm.FileSize = Fif.Length / 1000 & "Kbyte" '文件大小

NewTransForm.TransfersFileName = Fif.Name '文件名

Try

If (Fif.Length / TransTempSize).ToString.IndexOf(".") > 0 Then

If (Fif.Length / TransTempSize).ToString.Substring(0, 1) = "0" Then

ReDim bty(Fif.Length - 1)

FileSm.Read(bty, 0, bty.Length)

Tsc.SendFile(Fif.Name, bty, Crc)

With NewTransForm

.RateOfProgress = bty.Length '进度条当前值

.PercentOfProgress = "100%" '已完成的百分比

.LeaveTime = "完成" '剩余时间

.Transed = bty.Length & "byte" '已传输文件量

.RateOfTransfers = Math.Floor(bty.Length / Senconds) & "Kbyte/秒" '传输速度

End With

Else

For i = Math.Floor(Fif.Length / TransTempSize) To 1 Step -1

FileSm.Read(bty, 0, bty.Length)

Tsc.SendFile(Fif.Name, bty, Crc)

With NewTransForm

.RateOfProgress = Star

.PercentOfProgress = Math.Floor(NewTransForm.pgbTransfers.Value / NewTransForm.pgbTransfers.Maximum * 100) & "%"

If Star > 0 Then

.LeaveTime = TimeSpan.FromSeconds(Math.Floor((Fif.Length - Star) / 1000 / Math.Floor(Star / Senconds))).ToString

End If

.Transed = Star / 1000 & "Kbyte"

.RateOfTransfers = Math.Floor(Star / Senconds) & "Kbyte/秒"

End With

Star += TransTempSize

FileSm.Seek(Star, SeekOrigin.Begin)

Next

ReDim bty((Fif.Length - (Math.Floor(Fif.Length / TransTempSize)) * TransTempSize) - 1)

FileSm.Read(bty, 0, bty.Length)

Tsc.SendFile(Fif.Name, bty, Crc)

With NewTransForm

.RateOfProgress = .pgbTransfers.Maximum '进度条当前值

.PercentOfProgress = "100%"

.LeaveTime = "完成"

.Transed = FileSm.Length / 1000 & "Kbyte"

.RateOfTransfers = Math.Floor(Star / Senconds) & "Kbyte/秒" '传输速度

End With

End If

Else

For i = Math.Floor(Fif.Length / TransTempSize) To 1 Step -1

FileSm.Read(bty, 0, bty.Length)

Tsc.SendFile(Fif.Name, bty, Crc)

With NewTransForm

.RateOfProgress = Star

.PercentOfProgress = Math.Floor(NewTransForm.pgbTransfers.Value / NewTransForm.pgbTransfers.Maximum * 100) & "%"

.Transed = Star / 1000 & "Kbyte"

If Star > 0 Then

.LeaveTime = TimeSpan.FromSeconds(Math.Floor((Fif.Length - Star) / 1000 / Math.Floor(Star / Senconds))).ToString

End If

.RateOfTransfers = Math.Floor(Star / Senconds) & "Kbyte/秒" '传输速度

End With

Star += TransTempSize

FileSm.Seek(Star, SeekOrigin.Begin)

Next

NewTransForm.LeaveTime = "完成"

End If

NewTransForm.btnCancle.Text = "确 定"

Me.Timer1.Stop()

Senconds = 10

'NewTransForm.Close()

'MsgBox("传输完成")

Catch ex As Exception

MsgBox(ex.ToString)

End Try

FileSm.Close()

End Sub

'接受文件方法

Public Function GetFile(ByVal _filename As String) As Integer

End Function

'记时

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick

Senconds += 10

End Sub

Public Function ShowUI() As Integer

NewTransForm = New FrmTransfersUI

NewTransForm.Show()

Return 0

End Function

End Class

End Namespace

客户端窗体(显示文件传输的进度 时间 大小 。。。。。)

Public Class FrmTransfersUI

Inherits System.Windows.Forms.Form

#Region " Windows 窗体设计器生成的代码 "

Public Sub New()

MyBase.New()

'该调用是 Windows 窗体设计器所必需的。

InitializeComponent()

'在 InitializeComponent() 调用之后添加任何初始化

End Sub

'窗体重写 dispose 以清理组件列表。

Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)

If disposing Then

If Not (components Is Nothing) Then

components.Dispose()

End If

End If

MyBase.Dispose(disposing)

End Sub

'Windows 窗体设计器所必需的

Private components As System.ComponentModel.IContainer

'注意: 以下过程是 Windows 窗体设计器所必需的

'可以使用 Windows 窗体设计器修改此过程。

'不要使用代码编辑器修改它。

Friend WithEvents Button1 As System.Windows.Forms.Button

Friend WithEvents pgbTransfers As System.Windows.Forms.ProgressBar

Friend WithEvents Button2 As System.Windows.Forms.Button

Friend WithEvents lblRateOfTransfers As System.Windows.Forms.Label

Friend WithEvents lblTransfersFileName As System.Windows.Forms.Label

Friend WithEvents btnCancle As System.Windows.Forms.Button

Friend WithEvents lblFileSize As System.Windows.Forms.Label

Friend WithEvents lblLeaveTime As System.Windows.Forms.Label

Friend WithEvents lblPercentOfProgress As System.Windows.Forms.Label

Friend WithEvents lblTransed As System.Windows.Forms.Label

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

Me.Button1 = New System.Windows.Forms.Button

Me.pgbTransfers = New System.Windows.Forms.ProgressBar

Me.Button2 = New System.Windows.Forms.Button

Me.lblRateOfTransfers = New System.Windows.Forms.Label

Me.lblTransed = New System.Windows.Forms.Label

Me.lblTransfersFileName = New System.Windows.Forms.Label

Me.btnCancle = New System.Windows.Forms.Button

Me.lblFileSize = New System.Windows.Forms.Label

Me.lblLeaveTime = New System.Windows.Forms.Label

Me.lblPercentOfProgress = New System.Windows.Forms.Label

Me.SuspendLayout()

'

'Button1

'

Me.Button1.Dock = System.Windows.Forms.DockStyle.Fill

Me.Button1.Enabled = False

Me.Button1.FlatStyle = System.Windows.Forms.FlatStyle.System

Me.Button1.Location = New System.Drawing.Point(0, 0)

Me.Button1.Name = "Button1"

Me.Button1.Size = New System.Drawing.Size(448, 136)

Me.Button1.TabIndex = 0

'

'pgbTransfers

'

Me.pgbTransfers.Location = New System.Drawing.Point(10, 16)

Me.pgbTransfers.Name = "pgbTransfers"

Me.pgbTransfers.Size = New System.Drawing.Size(430, 12)

Me.pgbTransfers.TabIndex = 1

'

'Button2

'

Me.Button2.Enabled = False

Me.Button2.FlatStyle = System.Windows.Forms.FlatStyle.System

Me.Button2.Location = New System.Drawing.Point(4, 4)

Me.Button2.Name = "Button2"

Me.Button2.Size = New System.Drawing.Size(442, 130)

Me.Button2.TabIndex = 2

'

'lblRateOfTransfers

'

Me.lblRateOfTransfers.FlatStyle = System.Windows.Forms.FlatStyle.System

Me.lblRateOfTransfers.Location = New System.Drawing.Point(10, 36)

Me.lblRateOfTransfers.Name = "lblRateOfTransfers"

Me.lblRateOfTransfers.Size = New System.Drawing.Size(220, 14)

Me.lblRateOfTransfers.TabIndex = 3

Me.lblRateOfTransfers.Text = "传输速度:"

'

'lblTransed

'

Me.lblTransed.FlatStyle = System.Windows.Forms.FlatStyle.System

Me.lblTransed.Location = New System.Drawing.Point(10, 58)

Me.lblTransed.Name = "lblTransed"

Me.lblTransed.Size = New System.Drawing.Size(220, 14)

Me.lblTransed.TabIndex = 4

Me.lblTransed.Text = "已 传 送:"

'

'lblTransfersFileName

'

Me.lblTransfersFileName.FlatStyle = System.Windows.Forms.FlatStyle.System

Me.lblTransfersFileName.Location = New System.Drawing.Point(10, 80)

Me.lblTransfersFileName.Name = "lblTransfersFileName"

Me.lblTransfersFileName.Size = New System.Drawing.Size(220, 14)

Me.lblTransfersFileName.TabIndex = 5

Me.lblTransfersFileName.Text = "传输文件:"

'

'btnCancle

'

Me.btnCancle.FlatStyle = System.Windows.Forms.FlatStyle.System

Me.btnCancle.Location = New System.Drawing.Point(192, 104)

Me.btnCancle.Name = "btnCancle"

Me.btnCancle.TabIndex = 6

Me.btnCancle.Text = "取 消"

'

'lblFileSize

'

Me.lblFileSize.FlatStyle = System.Windows.Forms.FlatStyle.System

Me.lblFileSize.Location = New System.Drawing.Point(246, 80)

Me.lblFileSize.Name = "lblFileSize"

Me.lblFileSize.Size = New System.Drawing.Size(192, 14)

Me.lblFileSize.TabIndex = 9

Me.lblFileSize.Text = "文件大小:"

'

'lblLeaveTime

'

Me.lblLeaveTime.FlatStyle = System.Windows.Forms.FlatStyle.System

Me.lblLeaveTime.Location = New System.Drawing.Point(246, 58)

Me.lblLeaveTime.Name = "lblLeaveTime"

Me.lblLeaveTime.Size = New System.Drawing.Size(192, 14)

Me.lblLeaveTime.TabIndex = 8

Me.lblLeaveTime.Text = "剩余时间:"

'

'lblPercentOfProgress

'

Me.lblPercentOfProgress.FlatStyle = System.Windows.Forms.FlatStyle.System

Me.lblPercentOfProgress.Location = New System.Drawing.Point(246, 36)

Me.lblPercentOfProgress.Name = "lblPercentOfProgress"

Me.lblPercentOfProgress.Size = New System.Drawing.Size(192, 14)

Me.lblPercentOfProgress.TabIndex = 7

Me.lblPercentOfProgress.Text = "传输进度:"

'

'FrmTransfersUI

'

Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)

Me.ClientSize = New System.Drawing.Size(448, 136)

Me.Controls.Add(Me.lblFileSize)

Me.Controls.Add(Me.lblLeaveTime)

Me.Controls.Add(Me.lblPercentOfProgress)

Me.Controls.Add(Me.btnCancle)

Me.Controls.Add(Me.lblTransfersFileName)

Me.Controls.Add(Me.lblTransed)

Me.Controls.Add(Me.lblRateOfTransfers)

Me.Controls.Add(Me.pgbTransfers)

Me.Controls.Add(Me.Button2)

Me.Controls.Add(Me.Button1)

Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None

Me.Name = "FrmTransfersUI"

Me.ShowInTaskbar = False

Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen

Me.Text = "FrmTransfersUI"

Me.TopMost = True

Me.ResumeLayout(False)

End Sub

#End Region

Public Event UserCancle()

Public WriteOnly Property MaxOfProgress()

Set(ByVal Value)

Me.pgbTransfers.Maximum = Value

End Set

End Property

Public WriteOnly Property RateOfProgress()

Set(ByVal Value)

Me.pgbTransfers.Value = Value

End Set

End Property

Public WriteOnly Property RateOfTransfers() As String

Set(ByVal Value As String)

Me.lblRateOfTransfers.Text = "传输速度:" & Value

End Set

End Property

Public WriteOnly Property Transed() As String

Set(ByVal Value As String)

Me.lblTransed.Text = "已 传 送:" & Value

End Set

End Property

Public WriteOnly Property TransfersFileName() As String

Set(ByVal Value As String)

Me.lblTransfersFileName.Text = "传输文件:" & Value

End Set

End Property

Public WriteOnly Property PercentOfProgress() As String

Set(ByVal Value As String)

Me.lblPercentOfProgress.Text = "传输进度:" & Value

End Set

End Property

Public WriteOnly Property LeaveTime() As String

Set(ByVal Value As String)

Me.lblLeaveTime.Text = "剩余时间:" & Value

End Set

End Property

Public WriteOnly Property FileSize() As String

Set(ByVal Value As String)

Me.lblFileSize.Text = "文件大小:" & Value

End Set

End Property

Private Sub btnCancle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancle.Click

If Me.btnCancle.Text = "确 定" Then

Me.Close()

Else

RaiseEvent UserCancle()

End If

End Sub

End Class

服务器端类 下面还有个模块

Imports System.Runtime

Imports System.Runtime.Remoting

Imports System.Runtime.Remoting.Channels

Imports System.Runtime.Remoting.Channels.Tcp

Imports System.IO

Namespace Nail.Net.Remoting.Server

Public Class FileTransServer

Private TransServerClassName As String

Private TransType As TrType

Private TransPort As Integer

Private TransCRC32 As Integer

Enum TrType

TCP = 1

HTTP = 2

End Enum

Public Property Type() As TrType

Get

Return TransType

End Get

Set(ByVal Value As TrType)

Me.TransType = Value

End Set

End Property

Public Property ServerTransSaveFilePath() As String

Get

Return TransSaveFilePath

End Get

Set(ByVal Value As String)

TransSaveFilePath = Value

End Set

End Property

Public Property ServerTempFilePath() As String

Get

Return TempFilePath

End Get

Set(ByVal Value As String)

TempFilePath = Value

End Set

End Property

Public Property ServerClassName() As String

Get

Return ServerClassName

End Get

Set(ByVal Value As String)

Me.TransServerClassName = Value

End Set

End Property

Public Property Port() As Integer

Get

Return Port

End Get

Set(ByVal Value As Integer)

Me.TransPort = Value

End Set

End Property

Public Sub StarServer()

Select Case TransType

Case TrType.TCP

Dim a As New System.Runtime.Remoting.Channels.Tcp.TcpChannel(TransPort)

ChannelServices.RegisterChannel(a)

Case TrType.HTTP

Dim a As New System.Runtime.Remoting.Channels.Http.HttpChannel(TransPort)

ChannelServices.RegisterChannel(a)

End Select

System.Runtime.Remoting.RemotingConfiguration.ApplicationName = TransServerClassName

RemotingConfiguration.RegisterWellKnownServiceType(GetType(TransFile), TransServerClassName, WellKnownObjectMode.SingleCall)

End Sub

End Class

Public Class TransFile

Inherits MarshalByRefObject

Implements Nail.Net.Remoting.Trans.iTransFile

Public Function CompareFile(ByVal FileName As String, ByVal ClientCrc As Integer) As Boolean Implements Nail.Net.Remoting.Trans.iTransFile.CompareFile

Dim crc As New Nail.FileTools.clsCrc32

If crc.CalcuateFile(FileName) = ClientCrc Then

Return True

Else

Return False

End If

End Function

Public Function GetFileDet(ByVal FileName As String) As Integer Implements Nail.Net.Remoting.Trans.iTransFile.GetFileDet

Dim c As New FileInfo(FileName)

Return c.Length

End Function

Public Function GetFileInfo(ByVal FileName As String) As Byte() Implements Nail.Net.Remoting.Trans.iTransFile.GetFileInfo

Dim FullName As String = FileName

Dim c As New FileInfo(FullName)

Return GetFileInfo(FileName, 0, c.Length)

End Function

Public Function GetFileInfo(ByVal FileName As String, ByVal Length As Integer) As Byte() Implements Nail.Net.Remoting.Trans.iTransFile.GetFileInfo

Return GetFileInfo(FileName, 0, Length)

End Function

Public Function GetFileInfo(ByVal FileName As String, ByVal Point As Integer, ByVal Length As Integer) As Byte() Implements Nail.Net.Remoting.Trans.iTransFile.GetFileInfo

Dim FullName As String = FileName

Dim c As New FileInfo(FullName)

Dim x As New FileStream(FullName, FileMode.Open, FileAccess.Read, FileShare.Read)

Dim bty(Length - 1) As Byte

x.Seek(Point, SeekOrigin.Begin)

x.Read(bty, 0, Length)

Return bty

End Function

Public Function SendFile(ByVal FileName As String, ByVal bytes() As Byte, ByVal ClientCrc As Integer) As Integer Implements Nail.Net.Remoting.Trans.iTransFile.SendFile

Try

Dim a As New FileStream(TempFilePath & FileName, FileMode.OpenOrCreate)

a.Seek(a.Length, SeekOrigin.Begin)

a.Write(bytes, 0, bytes.Length)

a.Close()

Return 0

Catch ex As Exception

MsgBox(ex.ToString)

Return 1

Finally

'Dim Finf As New FileInfo(TempFilePath & FileName)

'If CompareFile(TempFilePath & FileName, ClientCrc) = True Then

' '拷贝临时文件()

' File.Copy(TempFilePath & FileName, TransSaveFilePath & FileName, True)

'Else

' '删除临时文件()

' Finf.Delete()

'End If

End Try

End Function

Public Property ServerTempFilePath() As String Implements Nail.Net.Remoting.Trans.iTransFile.ServerTempFilePath

Get

Return TempFilePath

End Get

Set(ByVal Value As String)

TempFilePath = Value

End Set

End Property

Public Property ServerTransSaveFilePath() As String Implements Nail.Net.Remoting.Trans.iTransFile.ServerTransSaveFilePath

Get

Return TransSaveFilePath

End Get

Set(ByVal Value As String)

TransSaveFilePath = Value

End Set

End Property

End Class

End Namespace

模块:

Module Server

Public TransSaveFilePath As String

Public TempFilePath As String

End Module

使用方法:

服务器端

示例:

Dim Server As New Nail.Net.Remoting.Server.FileTransServer

Server.ServerClassName = "aaa"

Server.Port = 10001

Server.Type = Nail.Net.Remoting.Server.FileTransServer.TrType.HTTP

Server.ServerTempFilePath = "f:\"

Server.ServerTransSaveFilePath = "e:\"

Server.StarServer()

客户端

cl.Port = 10001

cl.ServerClassName = "aaa"

cl.TempSize = 102400

cl.ServerIpAdr = "localhost"

cl.FullFileName = "c:\111.rar"

cl.Type = Nail.Net.Remoting.Client.FileTransClient.TrType.HTTP

cl.ConnetServer()

发送文件:

cl.SendFile()

最后忘记贴文件校对了 照书上搞的CRC32

Imports System.IO

Namespace Nail.FileTools

Public Class clsCrc32

Private Const TABLESIZE As Integer = 256

Private Const DEFAULTPOLYNOMIAL As Integer = &HEDB88320

Private Const DEFAULTIALVALUE As Integer = &HFFFFFFFF

Private lookup(TABLESIZE - 1) As Integer

Private crcPolynomial As Integer = 0

Public Sub New()

Me.New(DEFAULTPOLYNOMIAL)

End Sub

Public Sub New(ByVal crcPolynomial As Integer)

Me.crcPolynomial = crcPolynomial

InitLookupTable()

End Sub

Public Property Polynomial() As Integer

Get

Return crcPolynomial

End Get

Set(ByVal Value As Integer)

Me.crcPolynomial = Value

InitLookupTable()

End Set

End Property

Public Overloads Function CalculateBlock(ByVal bytes() As Byte) As Integer

Return CalculateBlock(bytes, 0, bytes.Length)

End Function

Public Overloads Function CalculateBlock(ByVal bytes() As Byte, ByVal index As Integer, ByVal length As Integer) As Integer

Return CalculateBlock(bytes, index, length, DEFAULTIALVALUE)

End Function

Public Overloads Function CalculateBlock(ByVal bytes() As Byte, ByVal index As Integer, ByVal length As Integer, ByVal initialValue As Integer) As Integer

If bytes Is Nothing Then

ElseIf index < 0 Or length <= 0 Or index + length > bytes.Length Then

End If

Return Not internalcalculateBlock(bytes, index, length, initialValue)

End Function

Private Function internalcalculateBlock(ByVal bytes() As Byte, ByVal index As Integer, ByVal length As Integer, ByVal initialValue As Integer) As Integer

Dim crc As Integer = initialValue

Dim shiftCrc As Integer

Dim position As Integer

For position = index To length - 1

shiftCrc = crc And &HFFFFFF00

shiftCrc = shiftCrc / &H100

shiftCrc = shiftCrc And &HFFFFFF

crc = shiftCrc Xor lookup(bytes(position)) Xor (crc And &HFF)

Next

Return crc

End Function

Public Overloads Function CalcuateFile(ByVal path As String) As Integer

Return CalcuateFile(path, DEFAULTIALVALUE)

End Function

Public Overloads Function CalcuateFile(ByVal path As String, ByVal initialValue As Integer) As Integer

If path Is Nothing Then

ElseIf path.Length = 0 Then

End If

Return Not InternalCalculateFile(path, initialValue)

End Function

Private Function InternalCalculateFile(ByVal path As String, ByVal initialValue As Integer) As Integer

Const blockSize As Integer = 4096

Dim count As Integer

Dim inStream As System.IO.FileStream

Dim bytes(blockSize - 1) As Byte

Dim crc As Integer = initialValue

Try

inStream = System.IO.File.Open(path, FileMode.Open, FileAccess.Read)

While inStream.Position < inStream.Length

count = inStream.Read(bytes, 0, blockSize)

crc = internalcalculateBlock(bytes, 0, count, crc)

End While

Finally

If Not inStream Is Nothing Then

inStream.Close()

End If

End Try

Return crc

End Function

Private Sub InitLookupTable()

Dim bytecount, bitcount As Integer

Dim crc, shiftCrc As Integer

For bytecount = 0 To TABLESIZE - 1

crc = bytecount

For bitcount = 0 To 7

shiftCrc = crc And &HFFFFFFFE

shiftCrc = shiftCrc \ &H2

shiftCrc = shiftCrc And &H7FFFFFFF

If (crc And &H1) Then

crc = shiftCrc Xor crcPolynomial

Else

crc = shiftCrc

End If

Next

lookup(bytecount) = crc

Next

End Sub

End Class

End Namespace

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有