asp文件打包和释放类

打包代码来自:http://blog.sjzj.com.cn/article.asp?id=789 (单翼)
我将代码封装成了一个类,添加了一些属性及功能,可以将指定文件目录下及其子目录下的所有文件和目录打包成一个文件,以及释放相应的包文件到指定目录。有兴趣的朋友可以加入对不列入打包的文件的判定和过滤的功能等等。

< %
' *--------------------------------------------------------------------------*/
'
*  文件打包和释放类 (Files Package and Relase Class) version 1.0
'
 *  (c) 2007 YoYo <mini125(at)gmail.com>
'
 *
'
 * YoYoPackOpCls is a class for Files Packing and Release
'
 *  Support web site: http://yangmingsheng.cn
'
 *  YoYoPackOpCls是一个对文件打包和释放的类,部分代码来自:http://blog.sjzj.com.cn/article.asp?id=789
'
 *  支持网站:http://yangmingsheng.cn
'
示例代码(demo):
'
'
打包(Packing)
'
'
Set P = new YoYoPackOpCls
'
P.ZipPath = Server.Mappath("test")'要打包的目录(打包不包括目录本身)
'
P.PackagePath = Server.Mappath("update.xml") '包文件路径
'
P.Zip'执行
'
Response.Write "费时:0" & P.LoseTime & "秒<br>"
'
Response.Write P.ErrorDesc'错误
'
Set P = Nothing
'
'
释放(release)
'
'
Set P = new YoYoPackOpCls
'
P.ReleasePath = Server.Mappath("t") '释放路径
'
P.PackagePath = Server.Mappath("update.xml")
'
P.Release
'
Response.Write "费时:0" & P.LoseTime & "秒<br>"
'
Response.Write P.ErrorDesc'错误
'
Set P = Nothing
'
------------------------------------------------------*/
Class YoYoPackOpCls
 
Private  XmlDom
 
Private  FsoObj
 
Private  StreamObj

 
Private  StartTime

 
Public   Property   Get  LoseTime
  LoseTime 
=   FormatNumber (( timer ()  -  StartTime), 3 )
 
End Property

 
Private   ErrorCode 
 
Public   Property   Get  ErrorDesc
  ErrorDesc 
=  ErrorCode
 
End Property

 
Private  PReleasePath 
 
Public   Property   Let  ReleasePath(Value)
  
If  Value  <>   Empty   Then
   PReleasePath 
=  Value
   
If   right (PReleasePath, 1 ) <> " "   Then  PReleasePath  =  PReleasePath  &   " "
  
End   If  
 
End Property  

 
Private  PPackagePath
 
Public   Property   Let  PackagePath(Value)
  PPackagePath 
=  Value
 
End Property  

 
Private  PZipPath
 
Public   Property   Let  ZipPath(Value)
  
If  Value  <>   Empty   Then
   PZipPath 
=  Value
   
If   right (PZipPath, 1 ) <> " "   Then  PZipPath  =  PZipPath  &   " "
  
End   If  
 
End Property  

 
Private   Sub  Class_Initialize 
  
On   Error   Resume   Next
  
Set  XmlDom  =  Server.CreateObject( " Microsoft.XMLDOM " )
  
Set  FsoObj  =   CreateObject ( " Scripting.FileSystemObject " )
  
Set  StreamObj  =   CreateObject ( " ADODB.Stream " )
  ReleasePath 
=  Server.MapPath( " Temp " )
  ErrorCode 
=   ""
  StartTime
= timer ()
 
End Sub  

 
Private   Sub  Class_Terminate
  
Set  XmlDom  =   Nothing
  
Set  FsoObj  =   Nothing
  
' StreamObj.Close
   Set  StreamObj  =   Nothing
  
On   Error   GOTO   0
 
End Sub  

 
Private   Sub  ZipFilesSub(DirPath)
  
dim  objFolder
  
dim  objSubFolders
  
dim  objSubFolder
  
dim  objFiles
  
dim  objFile 
  
dim  pathname,TextStream,pp,Xfolder,Xfpath,Xfile,Xpath,Xstream
  
dim  PathNameStr
  
Set  objFolder = FsoObj.GetFolder(DirPath)
  XmlDom.load(PPackagePath)
  XmlDom.async
= false
  
Set  Xfolder  =  XmlDom.SelectSingleNode( " //root " ).AppendChild(XmlDom.CreateElement( " folder " ))
  
Set  Xfpath  =  Xfolder.AppendChild(XmlDom.CreateElement( " path " ))
   Xfpath.text 
=   replace (DirPath,PZipPath, "" )
   
Set  objFiles  =  objFolder.Files
    
for   each  objFile in objFiles
     
if   lcase (DirPath  &  objFile.name)  <>   lcase (Request.ServerVariables( " PATH_TRANSLATED " ))  Then
      PathNameStr 
=  objFile.Path
      
Set  Xfile  =  XmlDom.SelectSingleNode( " //root " ).AppendChild(XmlDom.CreateElement( " file " ))
      
Set  Xpath  =  Xfile.AppendChild(XmlDom.CreateElement( " path " ))
      Xpath.text 
=   replace (PathNameStr,PZipPath, "" )
      StreamObj.Type 
=   1
      StreamObj.Open()
      StreamObj.LoadFromFile(PathNameStr)
      StreamObj.position 
=   0
      
      
Set  Xstream  =  Xfile.AppendChild(XmlDom.CreateElement( " stream " ))
      Xstream.SetAttribute 
" xmlns:dt " , " urn:schemas-microsoft-com:datatypes "
      Xstream.dataType 
=   " bin.base64 "
      Xstream.nodeTypedValue 
=  StreamObj.Read()
      
Set  Xpath  =   Nothing
      
Set  Xstream  =   Nothing
      
Set  Xfile  =   Nothing
      StreamObj.Close
     
end   if
    
next
  XmlDom.Save(PPackagePath)
  
Set  Xfpath  =   Nothing
  
Set  Xfolder  =   Nothing
  
Set  objSubFolders = objFolder.Subfolders
   
For   Each  objSubFolder In objSubFolders
    pathname 
=  DirPath  &  objSubFolder.name  &   " "
    ZipFilesSub(pathname)
   
Next
  
Set  objFolder = Nothing
  
Set  objSubFolders = Nothing
 
End Sub
 
' 打包<yoyo ||| yangmingsheng.cn>
  Public   Sub  Zip
  
Dim  Root
  XmlDom.async 
=   False
  
Set  Root  =  XmlDom.createProcessingInstruction( " xml " , " version='1.0' encoding='UTF-8' " )
  XmlDom.appendChild(Root)
  XmlDom.appendChild(XmlDom.CreateElement(
" root " ))
  XmlDom.Save(PPackagePath)
  
Set  Root  =   Nothing
  
If  PZipPath  =   Empty   Then  
   ErrorCode 
=  ErrorCode  &   " PZipPath is empty "
   
Exit   Sub
  
End   If  
  
If   Not  FsoObj.FolderExists(PZipPath)  Then
   ErrorCode 
=  ErrorCode  &   " PZipPath is not exists(PZipPath is not exists) "
   
Exit   Sub
  
End   If  
  ZipFilesSub(PZipPath)
  
If  Err  Then
   ErrorCode 
=  ErrorCode  &  Err.Description  &   " ( "   &  Err.Source  &   " ) "
   
End   If  
 
End Sub  
 
 
' 释放<yoyo ||| yangmingsheng.cn>
  Public   Sub  Release
  
Dim  objNodeList
  
Dim  i,j
  
If   Not  FsoObj.FolderExists(PReleasePath)  Then
   FsoObj.CreateFolder(PReleasePath)
  
End   If  
  
If   Not  FsoObj.FileExists(PPackagePath)  Then
   ErrorCode 
=  ErrorCode  &  Err.Description  &   " ( "   &  Err.Source  &   " ) "
   
Exit   Sub
  
End   If  
   XmlDom.load(PPackagePath)
   
If  XmlDom.readyState = 4   Then
    
If  XmlDom.parseError.errorCode  =   0   Then
      
      
Set  objNodeList  =  XmlDom.documentElement.selectNodes( " //folder/path " )
       
       j
= objNodeList.length - 1
       
For  i = 0   To  j
        
If  FsoObj.FolderExists(PReleasePath  &  objNodeList(i).text)  =   False   Then
         FsoObj.CreateFolder(PReleasePath 
&  objNodeList(i).text)
        
End   If
       
Next
      
Set  FsoObj  =   Nothing
      
Set  objNodeList  =   Nothing
      
Set  objNodeList  =  XmlDom.documentElement.selectNodes( " //file/path " )
       j
= objNodeList.length - 1
       
For  i = 0   To  j
         
With  StreamObj
           .Type 
=   1
           .Open
           .Write objNodeList(i).nextSibling.nodeTypedvalue
           .SaveToFile PReleasePath 
&  objNodeList(i).text, 2
           .Close
         
End   With
       
Next
      
Set  objNodeList  =   Nothing
    
Else
     ErrorCode 
=  ErrorCode  &  Err.Description  &   " ( "   &  Err.Source  &   " ) "
    
End   If
  
End   If
  
If  Err  Then
   ErrorCode 
=  ErrorCode  &  Err.Description  &   " ( "   &  Err.Source  &   " ) "
   
End   If  
 
End Sub
End  Class
%
>

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值