adodb.stream文件操作类
生活随笔
收集整理的這篇文章主要介紹了
adodb.stream文件操作类
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
<%''/*******************************二進(jìn)制文件操作類************************************''/*作者:死在水中的魚(yú)(死魚(yú))''/*日期:2004年9月7日''/*BLOG: http://blog.csdn.net/bpfish''/*''/*用法:''/*Dim obj,sData,iPos,iSize''/*Set obj=new FileClass''/*obj.OpenFile "文件絕對(duì)路徑地址","打開(kāi)方式" ? ? ? ''打開(kāi)文件,打開(kāi)方式的值和ADODB.Stream的Mode屬性值相同''/*打開(kāi)方式的相關(guān)幾個(gè)值:1 = 只讀 ?2 = 只寫(xiě) ?3或空值 = 讀寫(xiě)''/*obj.AppendTo "[追加文件]絕對(duì)路徑地址" ? ? ? ? ? ?''把當(dāng)前打開(kāi)的文件追加到[追加文件]的末尾''/*obj.Move 數(shù)值 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ''把當(dāng)前打開(kāi)的文件指針相對(duì)移動(dòng)[數(shù)值]個(gè)字節(jié)''/*obj.MoveTo 數(shù)值 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ''把當(dāng)前打開(kāi)的文件指針絕對(duì)于文件頭移動(dòng)[數(shù)值]個(gè)字節(jié)''/*sData=obj.Read(數(shù)值)''/*''說(shuō)明:obj.Read(數(shù)值)讀取當(dāng)前被打開(kāi)的文件[數(shù)值]個(gè)字節(jié) ?''/*注意:讀取位置與文件指針有關(guān),如果數(shù)值為0則從當(dāng)前文件位置開(kāi)始讀取數(shù)據(jù)直到文件尾''/*sData=obj.ReadAll ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ''讀取當(dāng)前打開(kāi)的文件所有數(shù)據(jù)''/*iPos=obj.Position ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ''返回當(dāng)前文件的文件指針位置(Position屬性是只讀,不能寫(xiě))''/*iSize=obj.Size ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?''返回當(dāng)前文件的大小,即字節(jié)總數(shù)''/*If obj.Eof Then Response.Write "文件尾" ? ? ? ? ?''/*注意:obj.Eof是判斷文件指針是否移動(dòng)到了文件的末尾,當(dāng)obj.Eof=True時(shí)''/* ? ? obj.Position=obj.Size。但obj.Position=obj.Size則不一定obj.Eof=True''/*obj.SaveAs "另存為文件名","保存模式" ? ? ? ? ? ? ?''將當(dāng)前打開(kāi)的文件另存為新文件,保存模式的值是1或2 1=非覆蓋 2=覆蓋''/*obj.CloseFile ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ''關(guān)閉當(dāng)前打開(kāi)的文件''/*obj.NewFile "新文件名",字節(jié)數(shù)據(jù)流 ? ? ? ? ? ? ? ?''將[字節(jié)數(shù)據(jù)流]建立一個(gè)新文件,如果文件存在則將覆蓋,如果非字節(jié)數(shù)據(jù)流則新建文件失敗''/*obj.AppendFile "文件1","文件2",“生成文件"''/*''將[文件1]和[文件2]合并為一個(gè)新的[生成文件],如果[生成文件]存在,則合并失敗!如果將[生成文件]置為空,則將[文件2]合并進(jìn)[文件1去。''/*Response.Write obj.GetText(字節(jié)數(shù)據(jù)流) ? ? ? ? ? ''將[字節(jié)數(shù)據(jù)流]轉(zhuǎn)換成字符串并返回''/*Set obj=Nothing''/*''/*說(shuō)明:字節(jié)數(shù)據(jù)流是二進(jìn)制的數(shù)據(jù)''/*以下方法可以不需要先OpenFile:NewFile和AppendFile和GetText方法,否則其它則必需要先使用OpenFile方法打開(kāi)文件''/**********************************************************************************Class FileClassPrivate ObjStream ? ? ? ? ? ''ADODB.Stream對(duì)象變量Private OpenFlag ? ? ? ? ? ?''是否已有打開(kāi)的文件Private FileIsEof''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:初始化類''/**********************************************************************************Private Sub Class_InitializeOpenFlag=FalseFileIsEof=TrueEnd Sub
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:''/**********************************************************************************Private Sub Class_Terminate ?Call CloseFileSet ObjStream=NothingEnd Sub
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:獲取文件的大小(-1 = 沒(méi)有打開(kāi)的文件)''/**********************************************************************************Public Property Get SizeIf OpenFlag ThenSize=ObjStream.SizeElseSize=-1End IfEnd Property
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:獲取當(dāng)前文件的文件指針位置(-1 = 沒(méi)有打開(kāi)的文件)''/**********************************************************************************Public Property Get PositionIf OpenFlag ThenPosition=ObjStream.PositionElsePosition=-1End IfEnd Property
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:獲取當(dāng)前的文件是否在文件尾(True = 文件尾 False = 否)''/*注意:返回為T(mén)rue時(shí)文件只是在最后一個(gè)字節(jié)處,返回為T(mén)rue是因?yàn)楸粐L試移動(dòng)指針到文件的尾部(大于文件的大小)''/* ? ? ?如果外部調(diào)用此值時(shí)建議當(dāng)該值為T(mén)rue時(shí),停止任何的讀取數(shù)據(jù)操作,否則有可能會(huì)有數(shù)據(jù)返回''/**********************************************************************************Public Property Get EofEof=FileIsEofEnd Property''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:打開(kāi)文件''/*參數(shù): FileName = 要打開(kāi)的文件名,絕對(duì)地址''/* ? OpenMode = 打開(kāi)文件的模式 值是同Adodb.Stream 對(duì)象的Mode屬性相同''/**********************************************************************************Public Function OpenFile(ByVal FileName,ByVal OpenMode)On Error Resume NextDim sFileName,iModeIf OpenFlag Then ? ? ? ? ''如果已有打開(kāi)文件,則關(guān)閉前一個(gè)文件Call CloseFileEnd IfsFileName=Trim(FileName)If sFileName="" ThenFileIsEof=TrueOpenFlag=FalseOpenFile=FalseExit FunctionEnd IfiMode=Cint(OpenMode) ? ? ''如果輸入的不是數(shù)字則采用默認(rèn)的3打開(kāi)模式(讀寫(xiě)型)If Err.Number<>0 TheniMode=3Err.ClearEnd IfIf 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 TheniMode=3 ? ? ? ? ? ? ? ''如果輸入的數(shù)字不在ADODB.ReadStream的Mode屬性所接受的值則采用默認(rèn)值3End If''On Error Goto 0If Not InitObjStream Then ? ? ? ? ? ''初始化對(duì)象,如不能初始化則返回一個(gè)False值FileIsEof=TrueOpenFlag=FalseOpenFile=FalseExit FunctionEnd IfObjStream.Type=1ObjStream.Mode=iModeObjStream.OpenObjStream.LoadFromFile sFileNameIf Err.Number<>0 ThenErr.ClearExit FunctionEnd IfFileIsEof=FalseOpenFlag=TrueOpenFile=TrueEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:讀取指定長(zhǎng)度的二進(jìn)制內(nèi)容''/*參數(shù): Numbytes = 要讀取的字節(jié)數(shù)(Numbytes = 0 獲取當(dāng)前文件指針后的所有內(nèi)容)''/*返回:讀取的字節(jié)數(shù)據(jù)''/**********************************************************************************Public Function Read(ByVal Numbytes)Dim iNumIf Not OpenFlag Then Exit FunctionIf Not IsInteger(Numbytes) Then Exit FunctioniNum=Clng(Numbytes)FileIsEof=FalseIf iNum<0 ThenExit FunctionElseIf (iNum+ObjStream.Position)>ObjStream.Size Then''iNum=ObjStream.Size-ObjStream.PositionFileIsEof=TrueEnd IfIf iNum=0 ThenRead=ObjStream.ReadElseRead=ObjStream.Read(iNum)End IfEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:讀取文件的所有內(nèi)容''/*參數(shù):''/*返回:讀取文件的所有字節(jié)數(shù)據(jù)''/**********************************************************************************Public Function ReadAllIf Not OpenFlag Then Exit FunctionObjStream.Position=0ReadAll=ObjStream.ReadFileIsEof=TrueEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:文件另存為''/*參數(shù):FileName = 另存為文件絕對(duì)路徑 ? Options = 文件另存為的模式 (1=非覆蓋 2=覆蓋)''/*返回:讀取文件的所有字節(jié)數(shù)據(jù)''/**********************************************************************************Public Function SaveAs(ByVal FileName,ByVal Options)On Error Resume NextDim sFileName,iOptionIf Not OpenFlag ThenSaveAs=FalseExit FunctionEnd IfsFileName=Trim(FileName)If sFileName="" ThenSaveAs=FalseExit FunctionEnd IfiOption=Cint(Options)If Err.Number<>0 Then ? ? ?''如果非數(shù)值型數(shù)據(jù),則采用默認(rèn)值 1 = 非覆蓋方式保存iOption=1 ? ? ? ? ?Err.ClearEnd IfIf iOption<>1 And iOption<>2 Then ? ? ? ''如果Options的值不在1和2的范圍,則采用默認(rèn)值 1iOption=1End IfObjStream.SaveToFile sFileName,iOptionIf Err.Number<>0 ThenErr.ClearSaveAs=FalseExit FunctionEnd IfSaveAs=TrueEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:追加文件數(shù)據(jù)到另一個(gè)文件''/*參數(shù):FileName = 被追加的文件絕對(duì)路徑''/*返回:True = 追加數(shù)據(jù)成功 ?False = 追加文件數(shù)據(jù)失敗''/**********************************************************************************Public Function AppendTo(ByVal FileName)On Error Resume NextDim sFileName,AppendObjIf Not OpenFlag ThenAppendTo=FalseExit FunctionEnd IfsFileName=Trim(FileName)If sFileName="" ThenAppendTo=FalseExit FunctionEnd If''打開(kāi)要被追加的文件Set AppendObj=Server.CreateObject("ADODB.Stream")AppendObj.Type=1AppendObj.Mode=3AppendObj.OpenAppendObj.LoadFromFile sFileNameIf Err.Number<>0 ThenErr.ClearAppendTo=FalseExit FunctionEnd IfAppendObj.Position=AppendObj.Size ? ?''移動(dòng)指針到文件尾AppendObj.Write ReadAll ? ? ? ? ? ? ?''追加數(shù)據(jù)第一個(gè)文件的數(shù)據(jù)AppendObj.SaveToFile sFileName,2 ? ? ''另存為自己If Err.Number<>0 ThenErr.ClearAppendTo=FalseExit FunctionEnd IfAppendObj.CloseSet AppendObj=NothingAppendTo=TrueEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:保存sData數(shù)據(jù)為一個(gè)文件''/*參數(shù):FileName = 被追加的文件絕對(duì)路徑''/*返回:True = 追加數(shù)據(jù)成功 ?False = 追加文件數(shù)據(jù)失敗''/**********************************************************************************Public Function NewFile(ByVal FileName,ByRef sData)On Error Resume NextDim sFileName,AppendObjsFileName=Trim(FileName)If sFileName="" ThenNewFile=FalseExit FunctionEnd If''打開(kāi)要被追加的文件Set AppendObj=Server.CreateObject("ADODB.Stream")AppendObj.Type=1AppendObj.Mode=3AppendObj.OpenIf Err.Number<>0 ThenErr.ClearNewFile=FalseExit FunctionEnd IfIf Left(TypeName(sData),4)="Byte" Then ? ? ''是字節(jié)流數(shù)據(jù)才能追加AppendObj.Write sData ? ? ? ? ? ? ? ? ? ''追加數(shù)據(jù)第一個(gè)文件的數(shù)據(jù)AppendObj.SaveToFile sFileName,2 ? ? ? ?''另存為自己ElseNewFile=FalseExit Function ? ? ??End IfIf Err.Number<>0 ThenErr.ClearNewFile=FalseExit FunctionEnd IfAppendObj.CloseSet AppendObj=NothingNewFile=TrueEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:文件合并''/*參數(shù):AppendFileName = 合并文件1 ? ?SourceFileName = 合并文件2 ?TargetFileName = 合并后的文件(如為空,則保存為第一個(gè)文件名)''/*返回:True = 合并成功 ?False = 合并失敗''/**********************************************************************************Public Function AppendFile(ByVal AppendFileName,ByVal SourceFileName,ByVal TargetFileName)On Error Resume NextDim sFileName1,sFileName2,AppendObj1,AppendObj2Dim sTargetFilesFileName1=Trim(AppendFileName)sFileName2=Trim(SourceFileName)sTargetFile=Trim(TargetFileName)If sFileName1="" Or sFileName2="" ThenAppendFile=FalseExit FunctionEnd If''打開(kāi)要被追加和追加的文件Set AppendObj1=Server.CreateObject("ADODB.Stream")Set AppendObj2=Server.CreateObject("ADODB.Stream")AppendObj1.Type=1AppendObj1.Mode=3AppendObj1.OpenAppendObj1.LoadFromFile sFileName1AppendObj2.Type=1AppendObj2.Mode=3AppendObj2.OpenAppendObj2.LoadFromFile sFileName2If Err.Number<>0 ThenErr.ClearAppendFile=FalseExit FunctionEnd IfAppendObj1.Position=AppendObj1.Size ? ? ? ? ? ''移動(dòng)指針到文件尾AppendObj1.Write AppendObj2.Read ? ? ? ? ? ? ?''追加數(shù)據(jù)第一個(gè)文件的數(shù)據(jù)If sTargetFile="" ThenAppendObj1.SaveToFile sFileName1,2 ? ? ? ? ''另存為自己ElseAppendObj1.SaveToFile sTargetFile,1 ? ? ? ?''另存為其它文件時(shí)不采用強(qiáng)制覆蓋方式End IfIf Err.Number<>0 ThenErr.ClearAppendFile=FalseExit FunctionEnd IfAppendObj1.CloseSet AppendObj1=NothingAppendObj2.CloseSet AppendObj2=NothingAppendFile=TrueEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:移動(dòng)文件指針(相對(duì)移動(dòng))''/*參數(shù): ToNum = 要移動(dòng)的字節(jié)數(shù)''/* ?''/**********************************************************************************Public Sub Move(ByVal ToNum)Dim iNumIf Not OpenFlag Then Exit SubIf Not IsInteger(ToNum) Then Exit SubiNum=ObjStream.Position+Clng(ToNum)FileIsEof=FalseIf iNum<0 TheniNum=0ElseIf iNum>ObjStream.Size TheniNum=ObjStream.SizeFileIsEof=TrueEnd IfObjStream.Position=iNumEnd Sub
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:移動(dòng)文件指針(絕對(duì)移動(dòng))''/*參數(shù): ToNum = 要移動(dòng)的字節(jié)數(shù)''/* ?''/**********************************************************************************Public Sub MoveTo(ByVal ToNum)Dim iNumIf Not OpenFlag Then Exit SubIf Not IsInteger(ToNum) Then Exit SubiNum=Clng(ToNum)FileIsEof=FalseIf iNum<0 TheniNum=0ElseIf iNum>ObjStream.Size TheniNum=ObjStream.SizeFileIsEof=TrueEnd IfObjStream.Position=iNumEnd Sub
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:關(guān)閉已打開(kāi)的文件''/**********************************************************************************Public Sub CloseFileOn Error Resume NextIf Not IsNothing(ObjStream) ThenObjStream.CloseEnd IfOpenFlag=FalseFileIsEof=TrueEnd Sub
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:初始化ObjStream對(duì)象''/**********************************************************************************Private Function InitObjStreamOn Error Resume NextIf IsNothing(ObjStream) ThenSet ObjStream=Server.CreateObject("ADODB.Stream")If Err.Number<>0 ThenErr.ClearInitObjStream=FalseExit FunctionEnd IfEnd IfInitObjStream=TrueEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:獲取二進(jìn)制轉(zhuǎn)換為字符串的數(shù)據(jù)''/**********************************************************************************Public Function GetText(ByRef vIn)On Error Resume NextDim strReturn, i, ThisCharCode, NextCharCodestrReturn = ""For i = 1 To LenB(vIn)ThisCharCode = AscB(MidB(vIn, i, 1))If ThisCharCode < &H80 ThenstrReturn = strReturn & Chr(ThisCharCode)ElseNextCharCode = AscB(MidB(vIn, i + 1, 1))strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))i = i + 1End IfNextGetText = strReturnEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:判斷OBJ對(duì)象是否是空值''/**********************************************************************************Private Function IsNothing(Obj)If Not IsObject(Obj) ThenIsNothing=TrueExit FunctionEnd If ?If Obj Is Nothing ThenIsNothing=TrueExit FunctionEnd IfIf IsNull(Obj) ThenIsNothing=TrueExit FunctionEnd If ? ?IsNothing=FalseEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:判斷是否是數(shù)字值(0,1,2,3,4,5...........9)''/**********************************************************************************Private Function IsInteger(Para)On Error Resume NextDim strDim l,iIf isNUll(para) ThenIsInteger=FalseExit FunctionEnd ifstr=Cstr(para)If Trim(str)="" ThenIsInteger=FalseExit FunctionEnd Ifl=Len(str)For i=1 To lIf Mid(str,i,1)>"9" Or Mid(str,i,1)<"0" ThenIsInteger=FalseExit FunctionEnd ifNextIsInteger=trueIf Err.number<>0 Then Err.clearEnd FunctionEnd Class%>
使用“二進(jìn)制文件操作類編寫(xiě)的[文件分割]和[文件合并]代碼例子:<%Dim objSet obj=New FileClass''文件分隔Dim iObj.OpenFile "G:\2.mp3",""i=0Do While Not Obj.EofIf Obj.NewFile("G:\2_"&i&".mp3",Obj.Read(2048*1024)) Then ? ? ? ? ''分隔成2M大小的文件Response.Write "分隔成文件G:\2_"&i&".mp3成功!<br>"ElseResponse.Write "分隔成文件G:\2_"&i&".mp3失敗!<br>"End Ifi=i+1LoopObj.CloseFile
''合并文件Dim jObj.AppendFile "G:\2_0.mp3","G:\2_1.mp3","G:\Mp3.mp3"For j=2 To i-1Obj.AppendFile "G:\Mp3.mp3","G:\2_"&j&".mp3",""NextResponse.Write "合并文件成功!"Set Obj=Nothing%>
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:''/**********************************************************************************Private Sub Class_Terminate ?Call CloseFileSet ObjStream=NothingEnd Sub
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:獲取文件的大小(-1 = 沒(méi)有打開(kāi)的文件)''/**********************************************************************************Public Property Get SizeIf OpenFlag ThenSize=ObjStream.SizeElseSize=-1End IfEnd Property
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:獲取當(dāng)前文件的文件指針位置(-1 = 沒(méi)有打開(kāi)的文件)''/**********************************************************************************Public Property Get PositionIf OpenFlag ThenPosition=ObjStream.PositionElsePosition=-1End IfEnd Property
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:獲取當(dāng)前的文件是否在文件尾(True = 文件尾 False = 否)''/*注意:返回為T(mén)rue時(shí)文件只是在最后一個(gè)字節(jié)處,返回為T(mén)rue是因?yàn)楸粐L試移動(dòng)指針到文件的尾部(大于文件的大小)''/* ? ? ?如果外部調(diào)用此值時(shí)建議當(dāng)該值為T(mén)rue時(shí),停止任何的讀取數(shù)據(jù)操作,否則有可能會(huì)有數(shù)據(jù)返回''/**********************************************************************************Public Property Get EofEof=FileIsEofEnd Property''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:打開(kāi)文件''/*參數(shù): FileName = 要打開(kāi)的文件名,絕對(duì)地址''/* ? OpenMode = 打開(kāi)文件的模式 值是同Adodb.Stream 對(duì)象的Mode屬性相同''/**********************************************************************************Public Function OpenFile(ByVal FileName,ByVal OpenMode)On Error Resume NextDim sFileName,iModeIf OpenFlag Then ? ? ? ? ''如果已有打開(kāi)文件,則關(guān)閉前一個(gè)文件Call CloseFileEnd IfsFileName=Trim(FileName)If sFileName="" ThenFileIsEof=TrueOpenFlag=FalseOpenFile=FalseExit FunctionEnd IfiMode=Cint(OpenMode) ? ? ''如果輸入的不是數(shù)字則采用默認(rèn)的3打開(kāi)模式(讀寫(xiě)型)If Err.Number<>0 TheniMode=3Err.ClearEnd IfIf 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 TheniMode=3 ? ? ? ? ? ? ? ''如果輸入的數(shù)字不在ADODB.ReadStream的Mode屬性所接受的值則采用默認(rèn)值3End If''On Error Goto 0If Not InitObjStream Then ? ? ? ? ? ''初始化對(duì)象,如不能初始化則返回一個(gè)False值FileIsEof=TrueOpenFlag=FalseOpenFile=FalseExit FunctionEnd IfObjStream.Type=1ObjStream.Mode=iModeObjStream.OpenObjStream.LoadFromFile sFileNameIf Err.Number<>0 ThenErr.ClearExit FunctionEnd IfFileIsEof=FalseOpenFlag=TrueOpenFile=TrueEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:讀取指定長(zhǎng)度的二進(jìn)制內(nèi)容''/*參數(shù): Numbytes = 要讀取的字節(jié)數(shù)(Numbytes = 0 獲取當(dāng)前文件指針后的所有內(nèi)容)''/*返回:讀取的字節(jié)數(shù)據(jù)''/**********************************************************************************Public Function Read(ByVal Numbytes)Dim iNumIf Not OpenFlag Then Exit FunctionIf Not IsInteger(Numbytes) Then Exit FunctioniNum=Clng(Numbytes)FileIsEof=FalseIf iNum<0 ThenExit FunctionElseIf (iNum+ObjStream.Position)>ObjStream.Size Then''iNum=ObjStream.Size-ObjStream.PositionFileIsEof=TrueEnd IfIf iNum=0 ThenRead=ObjStream.ReadElseRead=ObjStream.Read(iNum)End IfEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:讀取文件的所有內(nèi)容''/*參數(shù):''/*返回:讀取文件的所有字節(jié)數(shù)據(jù)''/**********************************************************************************Public Function ReadAllIf Not OpenFlag Then Exit FunctionObjStream.Position=0ReadAll=ObjStream.ReadFileIsEof=TrueEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:文件另存為''/*參數(shù):FileName = 另存為文件絕對(duì)路徑 ? Options = 文件另存為的模式 (1=非覆蓋 2=覆蓋)''/*返回:讀取文件的所有字節(jié)數(shù)據(jù)''/**********************************************************************************Public Function SaveAs(ByVal FileName,ByVal Options)On Error Resume NextDim sFileName,iOptionIf Not OpenFlag ThenSaveAs=FalseExit FunctionEnd IfsFileName=Trim(FileName)If sFileName="" ThenSaveAs=FalseExit FunctionEnd IfiOption=Cint(Options)If Err.Number<>0 Then ? ? ?''如果非數(shù)值型數(shù)據(jù),則采用默認(rèn)值 1 = 非覆蓋方式保存iOption=1 ? ? ? ? ?Err.ClearEnd IfIf iOption<>1 And iOption<>2 Then ? ? ? ''如果Options的值不在1和2的范圍,則采用默認(rèn)值 1iOption=1End IfObjStream.SaveToFile sFileName,iOptionIf Err.Number<>0 ThenErr.ClearSaveAs=FalseExit FunctionEnd IfSaveAs=TrueEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:追加文件數(shù)據(jù)到另一個(gè)文件''/*參數(shù):FileName = 被追加的文件絕對(duì)路徑''/*返回:True = 追加數(shù)據(jù)成功 ?False = 追加文件數(shù)據(jù)失敗''/**********************************************************************************Public Function AppendTo(ByVal FileName)On Error Resume NextDim sFileName,AppendObjIf Not OpenFlag ThenAppendTo=FalseExit FunctionEnd IfsFileName=Trim(FileName)If sFileName="" ThenAppendTo=FalseExit FunctionEnd If''打開(kāi)要被追加的文件Set AppendObj=Server.CreateObject("ADODB.Stream")AppendObj.Type=1AppendObj.Mode=3AppendObj.OpenAppendObj.LoadFromFile sFileNameIf Err.Number<>0 ThenErr.ClearAppendTo=FalseExit FunctionEnd IfAppendObj.Position=AppendObj.Size ? ?''移動(dòng)指針到文件尾AppendObj.Write ReadAll ? ? ? ? ? ? ?''追加數(shù)據(jù)第一個(gè)文件的數(shù)據(jù)AppendObj.SaveToFile sFileName,2 ? ? ''另存為自己If Err.Number<>0 ThenErr.ClearAppendTo=FalseExit FunctionEnd IfAppendObj.CloseSet AppendObj=NothingAppendTo=TrueEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:保存sData數(shù)據(jù)為一個(gè)文件''/*參數(shù):FileName = 被追加的文件絕對(duì)路徑''/*返回:True = 追加數(shù)據(jù)成功 ?False = 追加文件數(shù)據(jù)失敗''/**********************************************************************************Public Function NewFile(ByVal FileName,ByRef sData)On Error Resume NextDim sFileName,AppendObjsFileName=Trim(FileName)If sFileName="" ThenNewFile=FalseExit FunctionEnd If''打開(kāi)要被追加的文件Set AppendObj=Server.CreateObject("ADODB.Stream")AppendObj.Type=1AppendObj.Mode=3AppendObj.OpenIf Err.Number<>0 ThenErr.ClearNewFile=FalseExit FunctionEnd IfIf Left(TypeName(sData),4)="Byte" Then ? ? ''是字節(jié)流數(shù)據(jù)才能追加AppendObj.Write sData ? ? ? ? ? ? ? ? ? ''追加數(shù)據(jù)第一個(gè)文件的數(shù)據(jù)AppendObj.SaveToFile sFileName,2 ? ? ? ?''另存為自己ElseNewFile=FalseExit Function ? ? ??End IfIf Err.Number<>0 ThenErr.ClearNewFile=FalseExit FunctionEnd IfAppendObj.CloseSet AppendObj=NothingNewFile=TrueEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:文件合并''/*參數(shù):AppendFileName = 合并文件1 ? ?SourceFileName = 合并文件2 ?TargetFileName = 合并后的文件(如為空,則保存為第一個(gè)文件名)''/*返回:True = 合并成功 ?False = 合并失敗''/**********************************************************************************Public Function AppendFile(ByVal AppendFileName,ByVal SourceFileName,ByVal TargetFileName)On Error Resume NextDim sFileName1,sFileName2,AppendObj1,AppendObj2Dim sTargetFilesFileName1=Trim(AppendFileName)sFileName2=Trim(SourceFileName)sTargetFile=Trim(TargetFileName)If sFileName1="" Or sFileName2="" ThenAppendFile=FalseExit FunctionEnd If''打開(kāi)要被追加和追加的文件Set AppendObj1=Server.CreateObject("ADODB.Stream")Set AppendObj2=Server.CreateObject("ADODB.Stream")AppendObj1.Type=1AppendObj1.Mode=3AppendObj1.OpenAppendObj1.LoadFromFile sFileName1AppendObj2.Type=1AppendObj2.Mode=3AppendObj2.OpenAppendObj2.LoadFromFile sFileName2If Err.Number<>0 ThenErr.ClearAppendFile=FalseExit FunctionEnd IfAppendObj1.Position=AppendObj1.Size ? ? ? ? ? ''移動(dòng)指針到文件尾AppendObj1.Write AppendObj2.Read ? ? ? ? ? ? ?''追加數(shù)據(jù)第一個(gè)文件的數(shù)據(jù)If sTargetFile="" ThenAppendObj1.SaveToFile sFileName1,2 ? ? ? ? ''另存為自己ElseAppendObj1.SaveToFile sTargetFile,1 ? ? ? ?''另存為其它文件時(shí)不采用強(qiáng)制覆蓋方式End IfIf Err.Number<>0 ThenErr.ClearAppendFile=FalseExit FunctionEnd IfAppendObj1.CloseSet AppendObj1=NothingAppendObj2.CloseSet AppendObj2=NothingAppendFile=TrueEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:移動(dòng)文件指針(相對(duì)移動(dòng))''/*參數(shù): ToNum = 要移動(dòng)的字節(jié)數(shù)''/* ?''/**********************************************************************************Public Sub Move(ByVal ToNum)Dim iNumIf Not OpenFlag Then Exit SubIf Not IsInteger(ToNum) Then Exit SubiNum=ObjStream.Position+Clng(ToNum)FileIsEof=FalseIf iNum<0 TheniNum=0ElseIf iNum>ObjStream.Size TheniNum=ObjStream.SizeFileIsEof=TrueEnd IfObjStream.Position=iNumEnd Sub
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:移動(dòng)文件指針(絕對(duì)移動(dòng))''/*參數(shù): ToNum = 要移動(dòng)的字節(jié)數(shù)''/* ?''/**********************************************************************************Public Sub MoveTo(ByVal ToNum)Dim iNumIf Not OpenFlag Then Exit SubIf Not IsInteger(ToNum) Then Exit SubiNum=Clng(ToNum)FileIsEof=FalseIf iNum<0 TheniNum=0ElseIf iNum>ObjStream.Size TheniNum=ObjStream.SizeFileIsEof=TrueEnd IfObjStream.Position=iNumEnd Sub
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:關(guān)閉已打開(kāi)的文件''/**********************************************************************************Public Sub CloseFileOn Error Resume NextIf Not IsNothing(ObjStream) ThenObjStream.CloseEnd IfOpenFlag=FalseFileIsEof=TrueEnd Sub
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:初始化ObjStream對(duì)象''/**********************************************************************************Private Function InitObjStreamOn Error Resume NextIf IsNothing(ObjStream) ThenSet ObjStream=Server.CreateObject("ADODB.Stream")If Err.Number<>0 ThenErr.ClearInitObjStream=FalseExit FunctionEnd IfEnd IfInitObjStream=TrueEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:獲取二進(jìn)制轉(zhuǎn)換為字符串的數(shù)據(jù)''/**********************************************************************************Public Function GetText(ByRef vIn)On Error Resume NextDim strReturn, i, ThisCharCode, NextCharCodestrReturn = ""For i = 1 To LenB(vIn)ThisCharCode = AscB(MidB(vIn, i, 1))If ThisCharCode < &H80 ThenstrReturn = strReturn & Chr(ThisCharCode)ElseNextCharCode = AscB(MidB(vIn, i + 1, 1))strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))i = i + 1End IfNextGetText = strReturnEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:判斷OBJ對(duì)象是否是空值''/**********************************************************************************Private Function IsNothing(Obj)If Not IsObject(Obj) ThenIsNothing=TrueExit FunctionEnd If ?If Obj Is Nothing ThenIsNothing=TrueExit FunctionEnd IfIf IsNull(Obj) ThenIsNothing=TrueExit FunctionEnd If ? ?IsNothing=FalseEnd Function
''/**********************************************************************************''/* ? ? ? ? 函數(shù)名:判斷是否是數(shù)字值(0,1,2,3,4,5...........9)''/**********************************************************************************Private Function IsInteger(Para)On Error Resume NextDim strDim l,iIf isNUll(para) ThenIsInteger=FalseExit FunctionEnd ifstr=Cstr(para)If Trim(str)="" ThenIsInteger=FalseExit FunctionEnd Ifl=Len(str)For i=1 To lIf Mid(str,i,1)>"9" Or Mid(str,i,1)<"0" ThenIsInteger=FalseExit FunctionEnd ifNextIsInteger=trueIf Err.number<>0 Then Err.clearEnd FunctionEnd Class%>
使用“二進(jìn)制文件操作類編寫(xiě)的[文件分割]和[文件合并]代碼例子:<%Dim objSet obj=New FileClass''文件分隔Dim iObj.OpenFile "G:\2.mp3",""i=0Do While Not Obj.EofIf Obj.NewFile("G:\2_"&i&".mp3",Obj.Read(2048*1024)) Then ? ? ? ? ''分隔成2M大小的文件Response.Write "分隔成文件G:\2_"&i&".mp3成功!<br>"ElseResponse.Write "分隔成文件G:\2_"&i&".mp3失敗!<br>"End Ifi=i+1LoopObj.CloseFile
''合并文件Dim jObj.AppendFile "G:\2_0.mp3","G:\2_1.mp3","G:\Mp3.mp3"For j=2 To i-1Obj.AppendFile "G:\Mp3.mp3","G:\2_"&j&".mp3",""NextResponse.Write "合并文件成功!"Set Obj=Nothing%>
轉(zhuǎn)載于:https://www.cnblogs.com/top5/archive/2010/07/26/1785197.html
總結(jié)
以上是生活随笔為你收集整理的adodb.stream文件操作类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: cmd怎么进入linux系统时间,Lin
- 下一篇: java线程 睡眠_java线程睡眠问题