<%
''/*******************************二进制文件操作类************************************
''/*作者:死在水中的鱼(死鱼)
''/*日期: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
%>
 
使用“二进制文件操作类编写的[文件分割]和[文件合并]代码例子:
<%
Dim obj
Set obj=New FileClass
''文件分隔
Dim i
Obj.OpenFile "G:\2.mp3",""
i=0
Do While Not Obj.Eof
  If Obj.NewFile("G:\2_"&i&".mp3",Obj.Read(2048*1024)) Then         ''分隔成2M大小的文件
     Response.Write "分隔成文件G:\2_"&i&".mp3成功!<br>"
  Else
     Response.Write "分隔成文件G:\2_"&i&".mp3失败!<br>"
  End If
  i=i+1
Loop
Obj.CloseFile
 
''合并文件
Dim j
Obj.AppendFile "G:\2_0.mp3","G:\2_1.mp3","G:\Mp3.mp3"
For j=2 To i-1
   Obj.AppendFile "G:\Mp3.mp3","G:\2_"&j&".mp3",""
Next
Response.Write "合并文件成功!"
Set Obj=Nothing
%>
 
 
分类: asp
标签: ASPadostream文件操作
好文要顶 关注我 收藏该文  
0
0
 
 
 
posted @ 2010-07-26 13:15 与时俱进 阅读(4279) 评论(1) 编辑 收藏
 

vbs io file的更多相关文章

  1. java.io.NotSerializableException: test.io.file.Student

    java.io.NotSerializableException: test.io.file.Student    at java.io.ObjectOutputStream.writeObject0 ...

  2. IO:File类(java.io.File)

    public class File extends Object implements Serializable, Comparable<File> 构造方法: public File(S ...

  3. java.io.file

    package cn.edu.tongji.cims.wade.system;     import java.io.*;     public class FileOperate {     pub ...

  4. java获取指定路径下的指定文件/java.io.File.listFiles(FilenameFilter filter)

    java.io.File.listFiles(FilenameFilter filter) 返回抽象路径名数组,表示在目录中此抽象路径名表示,满足指定过滤器的文件和目录. 声明 以下是java.io. ...

  5. 【java IO File】统计项目代码总共多少行

    统计项目代码总共有多少行 思想: 1.首先将不需要迭代的文件夹,保存在集合中,不满足的就是需要迭代的文件夹 2.将需要进行统计行数的代码文件保存在集合中,满足的就是需要计算文件行数的文件 3.迭代方法 ...

  6. System.IO.File.Create 不会自动释放,一定要Dispose

    这样会导致W3P进程一直占用这个文件 System.IO.File.Create(HttpContext.Current.Server.MapPath(strName)) 最好加上Dispose Sy ...

  7. IIS目录下文件共享后System.IO.File.Exists返回false

    场景:在iis目录下,因为特殊需要共享一个文件夹,给到其他的技术人员访问,突然发现小小的操作,搞“大”了,使用 string path = Server.MapPath("~/file/te ...

  8. java.io.File类

    java.io.File类 1.凡是与输入.输出相关的类.接口等都定义在java.io包下 2.File是一个类.能够有构造器创建其对象.此对象相应着一个文件(.txt .avi .doc .ppt ...

  9. 详解C#中System.IO.File类和System.IO.FileInfo类的用法

    System.IO.File类和System.IO.FileInfo类主要提供有关文件的各种操作,在使用时需要引用System.IO命名空间.下面通过程序实例来介绍其主要属性和方法. (1) 文件打开 ...

随机推荐

  1. list.extend的结果是None

    执行list.exend()方法后,会直接修改list本身,而不会产生返回值 In [97]: d=(43,) In [98]: type(d) Out[98]: tuple In [99]: c O ...

  2. CAD参数绘mcdbsolid对象(网页版)

    主要用到函数说明: _DMxDrawX::DrawSolid 绘McDbSolid对象.详细说明如下: 参数 说明 DOUBLE dX1 第一个点X DOUBLE dY1 第一个点Y DOUBLE d ...

  3. Entity Framework 6.x介绍

    一.简介 Entity Framework是一个ORM框架,可以在SQL Server,Oracle,DB2,MySQL等数据库上使用.其发展到现在已经到6.x版本了,同时该版本也是被官方所推荐使用. ...

  4. vue 常用功能和命令

    1. vue-cli 构建项目 # 全局安装 vue-cli $ npm install --global vue-clif # 创建一个基于 webpack 模板的新项目 $ vue init we ...

  5. vue -vantUI tab切换时 list组件不触发load事件解决办法

    最近由于公司项目需要,用vue写了几个简单的页面.用到了vantUI List 列表 瀑布流滚动加载,用于控制长列表的展示 当列表即将滚动到底部时,会触发事件并加载更多列表项. (页面加载完成后默认会 ...

  6. vue cli本地开发跨域问题解决

    首先呢,找到在目录里找到config文件夹 然后修改config文件夹下的index.js里面dev的配置项proxyTable: 修改为: proxyTable: { '/api': { targe ...

  7. 笔试算法题(27):判断单向链表是否有环并找出环入口节点 & 判断两棵二元树是否相等

    出题:判断一个单向链表是否有环,如果有环则找到环入口节点: 分析: 第一个问题:使用快慢指针(fast指针一次走两步,slow指针一次走一步,并判断是否到达NULL,如果fast==slow成立,则说 ...

  8. 小甲鱼python疑难点

    1.python生成器 2.while 1: num = input('请输入一个整数(输入Q结束程序):') if num != 'Q': num = int(num) print('十进制 -&g ...

  9. [Python3网络爬虫开发实战] 1.7.2-mitmproxy的安装

    mitmproxy是一个支持HTTP和HTTPS的抓包程序,类似Fiddler.Charles的功能,只不过它通过控制台的形式操作. 此外,mitmproxy还有两个关联组件,一个是mitmdump, ...

  10. 启用Windows10的Linux子系统并安装图形界面

    前言 目前市面上的PC电脑主要运行着四大类系统,它们分别是微软的Windows.苹果的MacOS.Linux的发行版以及Unix类系统.其中Linux和Unix都是开源的,因此市面出现的众多基于Lin ...