| <%''/*******************************二进制文件操作类************************************
 ''/*作者:死在水中的鱼(死鱼)
 ''/*日期:2004年9月7日
 ''/*BLOG: http://blog.csdn.net/bpfish
 ''/*
 ''/*用法:
 ''/*Dim obj,sData,iPos,iSize
 ''/*Set obj=new FileClass
 ''/*obj.OpenFile "文件绝对路径地址","打开方式" ''打开文件,打开方式的值和ADODB.Stream的Mode属性值相同
 ''/*打开方式的相关几个值:1 = 只读  2 = 只写  3或空值 = 读写
 ''/*obj.AppendTo "[追加文件]绝对路径地址"  ''把当前打开的文件追加到[追加文件]的末尾
 ''/*obj.Move 数值  ''把当前打开的文件指针相对移动[数值]个字节
 ''/*obj.MoveTo 数值 ''把当前打开的文件指针绝对于文件头移动[数值]个字节
 ''/*sData=obj.Read(数值)
 ''/*''说明:obj.Read(数值)读取当前被打开的文件[数值]个字节  ''/*注意:读取位置与文件指针有关,如果数值为0则从当前文件位置开始读取数据直到文件尾
 ''/*sData=obj.ReadAll  ''读取当前打开的文件所有数据
 ''/*iPos=obj.Position  ''返回当前文件的文件指针位置(Position属性是只读,不能写)
 ''/*iSize=obj.Size    ''返回当前文件的大小,即字节总数
 ''/*If obj.Eof Then Response.Write "文件尾"
 ''/*注意:obj.Eof是判断文件指针是否移动到了文件的末尾,当obj.Eof=True时
 ''/*     obj.Position=obj.Size。但obj.Position=obj.Size则不一定obj.Eof=True
 ''/*obj.SaveAs "另存为文件名","保存模式"  ''将当前打开的文件另存为新文件,保存模式的值是1或2 1=非覆盖 2=覆盖
 ''/*obj.CloseFile              ''关闭当前打开的文件
 ''/*obj.NewFile "新文件名",字节数据流    ''将[字节数据流]建立一个新文件,如果文件存在则将覆盖,如果非字节数据流则新建文件失败
 ''/*obj.AppendFile "文件1","文件2",“生成文件"
 ''/*''将[文件1]和[文件2]合并为一个新的[生成文件],如果[生成文件]存在,则合并失败!如果将[生成文件]置为空,则将[文件2]合并进[文件1去。
 ''/*Response.Write obj.GetText(字节数据流)  ''将[字节数据流]转换成字符串并返回
 ''/*Set obj=Nothing
 ''/*
 ''/*说明:字节数据流是二进制的数据
 ''/*以下方法可以不需要先OpenFile:NewFile和AppendFile和GetText方法,否则其它则必需要先使用OpenFile方法打开文件
 ''/**********************************************************************************
 Class FileClass
 Private ObjStream  ''ADODB.Stream对象变量
 Private OpenFlag  ''是否已有打开的文件
 Private FileIsEof
 ''/**********************************************************************************
 ''/*函数名:初始化类
 ''/**********************************************************************************
 Private Sub Class_Initialize
 OpenFlag=False
 FileIsEof=True
 End Sub
 
 ''/**********************************************************************************
 ''/*函数名:
 ''/**********************************************************************************
 Private Sub Class_Terminate
 Call CloseFile
 Set ObjStream=Nothing
 End Sub
 
 ''/**********************************************************************************
 ''/*函数名:获取文件的大小(-1 = 没有打开的文件)
 ''/**********************************************************************************
 Public Property Get Size
 If OpenFlag Then
 Size=ObjStream.Size
 Else
 Size=-1
 End If
 End Property
 
 ''/**********************************************************************************
 ''/*函数名:获取当前文件的文件指针位置(-1 = 没有打开的文件)
 ''/**********************************************************************************
 Public Property Get Position
 If OpenFlag Then
 Position=ObjStream.Position
 Else
 Position=-1
 End If
 End Property
 
 ''/**********************************************************************************
 ''/*函数名:获取当前的文件是否在文件尾(True = 文件尾 False = 否)
 ''/*注意:返回为True时文件只是在最后一个字节处,返回为True是因为被尝试移动指针到文件的尾部(大于文件的大小)
 ''/*如果外部调用此值时建议当该值为True时,停止任何的读取数据操作,否则有可能会有数据返回
 ''/**********************************************************************************
 Public Property Get Eof
 Eof=FileIsEof
 End Property
 ''/**********************************************************************************
 ''/*函数名:打开文件
 ''/*参数: FileName = 要打开的文件名,绝对地址
 ''/*OpenMode = 打开文件的模式 值是同Adodb.Stream 对象的Mode属性相同
 ''/**********************************************************************************
 Public Function OpenFile(ByVal FileName,ByVal OpenMode)
 On Error Resume Next
 Dim sFileName,iMode
 If OpenFlag Then ''如果已有打开文件,则关闭前一个文件
 Call CloseFile
 End If
 sFileName=Trim(FileName)
 If sFileName="" Then
 FileIsEof=True
 OpenFlag=False
 OpenFile=False
 Exit Function
 End If
 iMode=Cint(OpenMode) ''如果输入的不是数字则采用默认的3打开模式(读写型)
 If Err.Number<>0 Then
 iMode=3
 Err.Clear
 End If
 If iMode<>0 And iMode<>1 And iMode<>2 And iMode<>3 And iMode<>4 And iMode<>8 And iMode<>12 And iMode<>16 And iMode<>4194304 Then
 iMode=3 ''如果输入的数字不在ADODB.ReadStream的Mode属性所接受的值则采用默认值3
 End If
 ''On Error Goto 0
 If Not InitObjStream Then ''初始化对象,如不能初始化则返回一个False值
 FileIsEof=True
 OpenFlag=False
 OpenFile=False
 Exit Function
 End If
 ObjStream.Type=1
 ObjStream.Mode=iMode
 ObjStream.Open
 ObjStream.LoadFromFile sFileName
 If Err.Number<>0 Then
 Err.Clear
 Exit Function
 End If
 FileIsEof=False
 OpenFlag=True
 OpenFile=True
 End Function
 
 ''/**********************************************************************************
 ''/*函数名:读取指定长度的二进制内容
 ''/*参数: Numbytes = 要读取的字节数(Numbytes = 0 获取当前文件指针后的所有内容)
 ''/*返回:读取的字节数据
 ''/**********************************************************************************
 Public Function Read(ByVal Numbytes)
 Dim iNum
 If Not OpenFlag Then Exit Function
 If Not IsInteger(Numbytes) Then Exit Function
 iNum=Clng(Numbytes)
 FileIsEof=False
 If iNum<0 Then
 Exit Function
 ElseIf (iNum+ObjStream.Position)>ObjStream.Size Then
 ''iNum=ObjStream.Size-ObjStream.Position
 FileIsEof=True
 End If
 If iNum=0 Then
 Read=ObjStream.Read
 Else
 Read=ObjStream.Read(iNum)
 End If
 End Function
 
 ''/**********************************************************************************
 ''/*函数名:读取文件的所有内容
 ''/*参数:
 ''/*返回:读取文件的所有字节数据
 ''/**********************************************************************************
 Public Function ReadAll
 If Not OpenFlag Then Exit Function
 ObjStream.Position=0
 ReadAll=ObjStream.Read
 FileIsEof=True
 End Function
 
 ''/**********************************************************************************
 ''/*函数名:文件另存为
 ''/*参数:FileName = 另存为文件绝对路径 Options = 文件另存为的模式 (1=非覆盖 2=覆盖)
 ''/*返回:读取文件的所有字节数据
 ''/**********************************************************************************
 Public Function SaveAs(ByVal FileName,ByVal Options)
 On Error Resume Next
 Dim sFileName,iOption
 If Not OpenFlag Then
 SaveAs=False
 Exit Function
 End If
 sFileName=Trim(FileName)
 If sFileName="" Then
 SaveAs=False
 Exit Function
 End If
 iOption=Cint(Options)
 If Err.Number<>0 Then ''如果非数值型数据,则采用默认值 1 = 非覆盖方式保存
 iOption=1
 Err.Clear
 End If
 If iOption<>1 And iOption<>2 Then ''如果Options的值不在1和2的范围,则采用默认值 1
 iOption=1
 End If
 ObjStream.SaveToFile sFileName,iOption
 If Err.Number<>0 Then
 Err.Clear
 SaveAs=False
 Exit Function
 End If
 SaveAs=True
 End Function
 
 ''/**********************************************************************************
 ''/*函数名:追加文件数据到另一个文件
 ''/*参数:FileName = 被追加的文件绝对路径
 ''/*返回:True = 追加数据成功  False = 追加文件数据失败
 ''/**********************************************************************************
 Public Function AppendTo(ByVal FileName)
 On Error Resume Next
 Dim sFileName,AppendObj
 If Not OpenFlag Then
 AppendTo=False
 Exit Function
 End If
 sFileName=Trim(FileName)
 If sFileName="" Then
 AppendTo=False
 Exit Function
 End If
 ''打开要被追加的文件
 Set AppendObj=Server.CreateObject("ADODB.Stream")
 AppendObj.Type=1
 AppendObj.Mode=3
 AppendObj.Open
 AppendObj.LoadFromFile sFileName
 If Err.Number<>0 Then
 Err.Clear
 AppendTo=False
 Exit Function
 End If
 AppendObj.Position=AppendObj.Size ''移动指针到文件尾
 AppendObj.Write ReadAll      ''追加数据第一个文件的数据
 AppendObj.SaveToFile sFileName,2 ''另存为自己
 If Err.Number<>0 Then
 Err.Clear
 AppendTo=False
 Exit Function
 End If
 AppendObj.Close
 Set AppendObj=Nothing
 AppendTo=True
 End Function
 
 ''/**********************************************************************************
 ''/*函数名:保存sData数据为一个文件
 ''/*参数:FileName = 被追加的文件绝对路径
 ''/*返回:True = 追加数据成功  False = 追加文件数据失败
 ''/**********************************************************************************
 Public Function NewFile(ByVal FileName,ByRef sData)
 On Error Resume Next
 Dim sFileName,AppendObj
 sFileName=Trim(FileName)
 If sFileName="" Then
 NewFile=False
 Exit Function
 End If
 ''打开要被追加的文件
 Set AppendObj=Server.CreateObject("ADODB.Stream")
 AppendObj.Type=1
 AppendObj.Mode=3
 AppendObj.Open
 If Err.Number<>0 Then
 Err.Clear
 NewFile=False
 Exit Function
 End If
 If Left(TypeName(sData),4)="Byte" Then ''是字节流数据才能追加
 AppendObj.Write sData ''追加数据第一个文件的数据
 AppendObj.SaveToFile sFileName,2 ''另存为自己
 Else
 NewFile=False
 Exit Function
 End If
 If Err.Number<>0 Then
 Err.Clear
 NewFile=False
 Exit Function
 End If
 AppendObj.Close
 Set AppendObj=Nothing
 NewFile=True
 End Function
 
 ''/**********************************************************************************
 ''/*函数名:文件合并
 ''/*参数:AppendFileName = 合并文件1    SourceFileName = 合并文件2  TargetFileName = 合并后的文件(如为空,则保存为第一个文件名)
 ''/*返回:True = 合并成功  False = 合并失败
 ''/**********************************************************************************
 Public Function AppendFile(ByVal AppendFileName,ByVal SourceFileName,ByVal TargetFileName)
 On Error Resume Next
 Dim sFileName1,sFileName2,AppendObj1,AppendObj2
 Dim sTargetFile
 sFileName1=Trim(AppendFileName)
 sFileName2=Trim(SourceFileName)
 sTargetFile=Trim(TargetFileName)
 If sFileName1="" Or sFileName2="" Then
 AppendFile=False
 Exit Function
 End If
 ''打开要被追加和追加的文件
 Set AppendObj1=Server.CreateObject("ADODB.Stream")
 Set AppendObj2=Server.CreateObject("ADODB.Stream")
 AppendObj1.Type=1
 AppendObj1.Mode=3
 AppendObj1.Open
 AppendObj1.LoadFromFile sFileName1
 AppendObj2.Type=1
 AppendObj2.Mode=3
 AppendObj2.Open
 AppendObj2.LoadFromFile sFileName2
 If Err.Number<>0 Then
 Err.Clear
 AppendFile=False
 Exit Function
 End If
 AppendObj1.Position=AppendObj1.Size   ''移动指针到文件尾
 AppendObj1.Write AppendObj2.Read ''追加数据第一个文件的数据
 If sTargetFile="" Then
 AppendObj1.SaveToFile sFileName1,2 ''另存为自己
 Else
 AppendObj1.SaveToFile sTargetFile,1 ''另存为其它文件时不采用强制覆盖方式
 End If
 If Err.Number<>0 Then
 Err.Clear
 AppendFile=False
 Exit Function
 End If
 AppendObj1.Close
 Set AppendObj1=Nothing
 AppendObj2.Close
 Set AppendObj2=Nothing
 AppendFile=True
 End Function
 
 ''/**********************************************************************************
 ''/*函数名:移动文件指针(相对移动)
 ''/*参数: ToNum = 要移动的字节数
 ''/*
 ''/**********************************************************************************
 Public Sub Move(ByVal ToNum)
 Dim iNum
 If Not OpenFlag Then Exit Sub
 If Not IsInteger(ToNum) Then Exit Sub
 iNum=ObjStream.Position+Clng(ToNum)
 FileIsEof=False
 If iNum<0 Then
 iNum=0
 ElseIf iNum>ObjStream.Size Then
 iNum=ObjStream.Size
 FileIsEof=True
 End If
 ObjStream.Position=iNum
 End Sub
 
 ''/**********************************************************************************
 ''/*函数名:移动文件指针(绝对移动)
 ''/*参数: ToNum = 要移动的字节数
 ''/*
 ''/**********************************************************************************
 Public Sub MoveTo(ByVal ToNum)
 Dim iNum
 If Not OpenFlag Then Exit Sub
 If Not IsInteger(ToNum) Then Exit Sub
 iNum=Clng(ToNum)
 FileIsEof=False
 If iNum<0 Then
 iNum=0
 ElseIf iNum>ObjStream.Size Then
 iNum=ObjStream.Size
 FileIsEof=True
 End If
 ObjStream.Position=iNum
 End Sub
 
 ''/**********************************************************************************
 ''/*函数名:关闭已打开的文件
 ''/**********************************************************************************
 Public Sub CloseFile
 On Error Resume Next
 If Not IsNothing(ObjStream) Then
 ObjStream.Close
 End If
 OpenFlag=False
 FileIsEof=True
 End Sub
 
 ''/**********************************************************************************
 ''/*函数名:初始化ObjStream对象
 ''/**********************************************************************************
 Private Function InitObjStream
 On Error Resume Next
 If IsNothing(ObjStream) Then
 Set ObjStream=Server.CreateObject("ADODB.Stream")
 If Err.Number<>0 Then
 Err.Clear
 InitObjStream=False
 Exit Function
 End If
 End If
 InitObjStream=True
 End Function
 
 ''/**********************************************************************************
 ''/*函数名:获取二进制转换为字符串的数据
 ''/**********************************************************************************
 Public Function GetText(ByRef vIn)
 On Error Resume Next
 Dim strReturn, i, ThisCharCode, NextCharCode
 strReturn = ""
 For i = 1 To LenB(vIn)
 ThisCharCode = AscB(MidB(vIn, i, 1))
 If ThisCharCode < &H80 Then
 strReturn = strReturn & Chr(ThisCharCode)
 Else
 NextCharCode = AscB(MidB(vIn, i + 1, 1))
 strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
 i = i + 1
 End If
 Next
 GetText = strReturn
 End Function
 
 ''/**********************************************************************************
 ''/*函数名:判断OBJ对象是否是空值
 ''/**********************************************************************************
 Private Function IsNothing(Obj)
 If Not IsObject(Obj) Then
 IsNothing=True
 Exit Function
 End If
 If Obj Is Nothing Then
 IsNothing=True
 Exit Function
 End If
 If IsNull(Obj) Then
 IsNothing=True
 Exit Function
 End If
 IsNothing=False
 End Function
 
 ''/**********************************************************************************
 ''/*函数名:判断是否是数字值(0,1,2,3,4,5...........9)
 ''/**********************************************************************************
 Private Function IsInteger(Para)
 On Error Resume Next
 Dim str
 Dim l,i
 If isNUll(para) Then
 IsInteger=False
 Exit Function
 End if
 str=Cstr(para)
 If Trim(str)="" Then
 IsInteger=False
 Exit Function
 End If
 l=Len(str)
 For i=1 To l
 If Mid(str,i,1)>"9" Or Mid(str,i,1)<"0" Then
 IsInteger=False
 Exit Function
 End if
 Next
 IsInteger=true
 If Err.number<>0 Then Err.clear
 End Function
 End Class
 %>
                         (编辑:南平站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |