这个方法可以把整个文件夹打包到xml文件中,把这个xml文件文件和解包文件放在一起后,运行解包文件就可以把原来的文件释放出来,这样我们就可以把网站打包上传到虚拟主机,再运行解包文件就可以了。我在本地测试之选择了少部分文件,不知在文件很多的情况执行效率如何。
其实实现的思路也很简单,主要利用的是xml文件可以存放二进制数据的原理。有兴趣的朋友可以下载下面的附件研究下!!
解包文件
复制代码 代码如下:
<%@LANGUAGE="VBSCRIPT"CODEPAGE="65001"%>
<%OptionExplicit%>
<%OnErrorResumeNext%>
<%Response.Charset="UTF-8"%>
<%Server.ScriptTimeout=99999999%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
<title>查字典教程网——文件解包程序_www.jb51.net</title>
</head>
<body>
<%
DimstrLocalPath
'得到当前文件夹的物理路径
strLocalPath=Left(Request.ServerVariables("PATH_TRANSLATED"),InStrRev(Request.ServerVariables("PATH_TRANSLATED"),""))
DimobjXmlFile
DimobjNodeList
DimobjFSO
DimobjStream
Dimi,j
SetobjXmlFile=Server.CreateObject("Microsoft.XMLDOM")
objXmlFile.load(Server.MapPath("update.xml"))
IfobjXmlFile.readyState=4Then
IfobjXmlFile.parseError.errorCode=0Then
SetobjNodeList=objXmlFile.documentElement.selectNodes("//folder/path")
SetobjFSO=CreateObject("Scripting.FileSystemObject")
j=objNodeList.length-1
Fori=0Toj
IfobjFSO.FolderExists(strLocalPath&objNodeList(i).text)=FalseThen
objFSO.CreateFolder(strLocalPath&objNodeList(i).text)
EndIf
Response.Write"创建目录"&objNodeList(i).text&"<br/>"
Response.Flush
Next
SetobjFSO=nothing
SetobjNodeList=nothing
SetobjNodeList=objXmlFile.documentElement.selectNodes("//file/path")
j=objNodeList.length-1
Fori=0Toj
SetobjStream=CreateObject("ADODB.Stream")
WithobjStream
.Type=1
.Open
.WriteobjNodeList(i).nextSibling.nodeTypedvalue
.SaveToFilestrLocalPath&objNodeList(i).text,2
Response.Write"释放文件"&objNodeList(i).text&"<br/>"
Response.Flush
.Close
EndWith
SetobjStream=Nothing
Next
SetobjNodeList=nothing
EndIf
EndIf
SetobjXmlFile=Nothing
response.write"文件解包完毕"
%>
</body>
</html>
pack.asp 打包文件
复制代码 代码如下:
<%@LANGUAGE="VBSCRIPT"CODEPAGE="65001"%>
<%OptionExplicit%>
<%OnErrorResumeNext%>
<%Response.Charset="UTF-8"%>
<%Server.ScriptTimeout=99999999%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
<title>文件打包程序_查字典教程网_www.jb51.net</title>
</head>
<body>
<%
DimZipPathDir,ZipPathFile
Dimstartime,endtime
'在此更改要打包文件夹的路径
ZipPathDir="D:testaspdictionaryxmlPackedscrollColor"'
ZipPathFile="update.xml"
ifright(ZipPathDir,1)<>""thenZipPathDir=ZipPathDir&""
'开始打包
CreateXml(ZipPathFile)
'遍历目录内的所有文件以及文件夹
subLoadData(DirPath)
dimXmlDoc
dimfso'fso对象
dimobjFolder'文件夹对象
dimobjSubFolders'子文件夹集合
dimobjSubFolder'子文件夹对象
dimobjFiles'文件集合
dimobjFile'文件对象
dimobjStream
dimpathname,TextStream,pp,Xfolder,Xfpath,Xfile,Xpath,Xstream
dimPathNameStr
response.Write("=========="&DirPath&"==========<br>")
setfso=server.CreateObject("scripting.filesystemobject")
setobjFolder=fso.GetFolder(DirPath)'创建文件夹对象
Response.WriteDirPath
Response.flush
SetXmlDoc=Server.CreateObject("Microsoft.XMLDOM")
XmlDoc.loadServer.MapPath(ZipPathFile)
XmlDoc.async=false
'写入每个文件夹路径
setXfolder=XmlDoc.SelectSingleNode("//root").AppendChild(XmlDoc.CreateElement("folder"))
SetXfpath=Xfolder.AppendChild(XmlDoc.CreateElement("path"))
Xfpath.text=replace(DirPath,ZipPathDir,"")
setobjFiles=objFolder.Files
foreachobjFileinobjFiles
iflcase(DirPath&objFile.name)<>lcase(Request.ServerVariables("PATH_TRANSLATED"))then
Response.Write"---<br/>"
PathNameStr=DirPath&""&objFile.name
Response.WritePathNameStr&""
Response.flush
'================================================
'写入文件的路径及文件内容
setXfile=XmlDoc.SelectSingleNode("//root").AppendChild(XmlDoc.CreateElement("file"))
SetXpath=Xfile.AppendChild(XmlDoc.CreateElement("path"))
Xpath.text=replace(PathNameStr,ZipPathDir,"")
'创建文件流读入文件内容,并写入XML文件中
SetobjStream=Server.CreateObject("ADODB.Stream")
objStream.Type=1
objStream.Open()
objStream.LoadFromFile(PathNameStr)
objStream.position=0
SetXstream=Xfile.AppendChild(XmlDoc.CreateElement("stream"))
Xstream.SetAttribute"xmlns:dt","urn:schemas-microsoft-com:datatypes"
'文件内容采用二制方式存放
Xstream.dataType="bin.base64"
Xstream.nodeTypedValue=objStream.Read()
setobjStream=nothing
setXpath=nothing
setXstream=nothing
setXfile=nothing
'================================================
endif
next
Response.Write"<p>"
XmlDoc.Save(Server.Mappath(ZipPathFile))
setXfpath=nothing
setXfolder=nothing
setXmlDoc=nothing
'创建的子文件夹对象
setobjSubFolders=objFolder.Subfolders
'调用递归遍历子文件夹
foreachobjSubFolderinobjSubFolders
pathname=DirPath&objSubFolder.name&""
LoadData(pathname)
next
setobjFolder=nothing
setobjSubFolders=nothing
setfso=nothing
endsub
'创建一个空的XML文件,为写入文件作准备
subCreateXml(FilePath)
'程序开始执行时间
startime=timer()
dimXmlDoc,Root
SetXmlDoc=Server.CreateObject("Microsoft.XMLDOM")
XmlDoc.async=False
SetRoot=XmlDoc.createProcessingInstruction("xml","version='1.0'encoding='UTF-8'")
XmlDoc.appendChild(Root)
XmlDoc.appendChild(XmlDoc.CreateElement("root"))
XmlDoc.Save(Server.MapPath(FilePath))
SetRoot=Nothing
SetXmlDoc=Nothing
LoadData(ZipPathDir)
'程序结束时间
endtime=timer()
response.Write("页面执行时间:"&FormatNumber((endtime-startime),3)&"秒")
endsub
%>
</body>
</html>