明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

FSO組件設(shè)置案例技巧

[摘要]FSO,正如UFO般令人激動(dòng)、令人神往,當(dāng)然更多的亦是讓人歡喜讓人憂。君不見(jiàn)某空間服務(wù)商廣告:100MB空間只要60RMB/年,支持?jǐn)?shù)據(jù)庫(kù),支持什么什么……一問(wèn)不支持FSO,立馬泄氣。那FSO究竟是什么東西,它的力量又是如何巨大,其操作的原理又是怎的怎的呢?這次來(lái)個(gè)徹底的理解。   首先,F(xiàn)SO...

FSO,正如UFO般令人激動(dòng)、令人神往,當(dāng)然更多的亦是讓人歡喜讓人憂。君不見(jiàn)某空間服務(wù)商廣告:100MB空間只要60RMB/年,支持?jǐn)?shù)據(jù)庫(kù),支持什么什么……一問(wèn)不支持FSO,立馬泄氣。那FSO究竟是什么東西,它的力量又是如何巨大,其操作的原理又是怎的怎的呢?這次來(lái)個(gè)徹底的理解。 
  首先,F(xiàn)SO是FileSystemObject的簡(jiǎn)稱。當(dāng)然也就是我們的俗稱FSO組件了,該組件可以用來(lái)處理驅(qū)動(dòng)器、文件夾以及文件。
  它可以檢測(cè)并顯示出系統(tǒng)驅(qū)動(dòng)器的信息分配情況;還能夠創(chuàng)建、改變、移動(dòng)和刪除文件夾,并能探測(cè)一些給定的文件夾是否存在,若存在,還能提取出該文件夾的信息,如名稱、被創(chuàng)建或最后一次修改的日期,等等。FSO還使得對(duì)文件的處理變得很容易。
  一、fso.GetDrive
  正如其它組件的建立一樣,F(xiàn)SO的引用也必須建立連接。

Set fso=Server.CreateObject("Scripting.FileSystemObject")
  注意CreateObject的內(nèi)部再也不是MSWC了,而是Scripting。
  那下面就可以通過(guò)fso來(lái)處理驅(qū)動(dòng)器了。比如fso.GetDriveName提取驅(qū)動(dòng)器名,fso.GetDrive同樣提取標(biāo)準(zhǔn)驅(qū)動(dòng)器名。比如:
  1,fso.asp

<%Set fso=Server.CreateObject("Scripting.FileSystemObject")%>
<%=fso.GetDriveName("d:")%>
<br>
<%=fso.GetDrive("d:")%>
  你會(huì)發(fā)現(xiàn)GetDriveName("d:")就是“d:”,而GetDrive("d:")則為標(biāo)準(zhǔn)的“D:”,所以我們一般這樣寫(xiě)fso.GetDrive(fso.GetDriveName(drvPath))來(lái)提取某個(gè)具體的驅(qū)動(dòng)盤(pán)。
  二、drv.GetInfo
  上面已經(jīng)把某個(gè)特定的驅(qū)動(dòng)器提取了,那接著是不是提取該驅(qū)動(dòng)盤(pán)的具體信息。
  2,drv.asp

<%Set fso=Server.CreateObject("Scripting.FileSystemObject")
Set drv=fso.GetDrive(fso.GetDriveName("d:"))%>
該盤(pán)的空間大。<%=drv.TotalSize%><br>
該盤(pán)的剩余空間大小:<%=drv.FreeSpace%>
  以上只是提取的D盤(pán)驅(qū)動(dòng)器的信息,來(lái)個(gè)通用的函數(shù),繼續(xù)分別測(cè)試自己的驅(qū)動(dòng)吧。
  3,drvinfo.asp

<%
Function ShowDriveInfo(drvPath) 
Dim fso, drv, s 
Set fso = CreateObject("Scripting.FileSystemObject") 
Set drv = fso.GetDrive(fso.GetDriveName(drvPath)) 
s = "驅(qū)動(dòng)盤(pán)" & drv & "的卷標(biāo)是:" 
s = s & drv.VolumeName & "<br>" 
s = s & "總計(jì)空間:" & drv.TotalSize & "<br>" 
s = s & "剩余空間:" & drv.FreeSpace & "<br>" 
s = s & "文件類型:" & drv.DriveType & "<br>" 
s = s & "文件系統(tǒng):" & drv.FileSystem 
Response.Write s
End Function%>
<%on error resume next
whatpath=request.form("path")
if whatpath<>"" then
ShowDriveInfo(whatpath)
end if%>
<form action="drvinfo.asp" method="post">
<input name="path">
<input type="submit">
</form>
  其中的drv.TotalSize和drv.FreeSpace返回的是字節(jié)數(shù),我們可以用FormatNumber()函數(shù)處理下。比如FormatNumber(Drive.TotalSize/1024,0)得到一眼就知磁盤(pán)多少G的值。
  還有一個(gè)文件類型:drv.DriveType最多的時(shí)候是顯示數(shù)值“2”,其實(shí)“2”就表示的“硬盤(pán)驅(qū)動(dòng)器”,“1”表示“軟盤(pán)驅(qū)動(dòng)器”,“4”表示“光盤(pán)驅(qū)動(dòng)器”……

[page_break]
  下面就用一個(gè)程序遍歷顯示自己機(jī)器上所有驅(qū)動(dòng)器的信息。
  4,showall.asp

<%Function tran(Driver)
Select Case Driver
Case 0: tran="設(shè)備無(wú)法識(shí)別"
Case 1: tran="軟盤(pán)驅(qū)動(dòng)器"
Case 2: tran="硬盤(pán)驅(qū)動(dòng)器"
Case 3: tran="網(wǎng)絡(luò)硬盤(pán)驅(qū)動(dòng)器"
Case 4: tran="光盤(pán)驅(qū)動(dòng)器"
Case 5: tran="RAM虛擬磁盤(pán)"
End Select
End Functionset
 fso=Server.CreateObject("Scripting.FileSystemObject")%>
 <table border=1 width="100%">
 <tr>
 <td>盤(pán)符</td>
 <td>類型</td>
 <td>卷標(biāo)</td>
 <td>總計(jì)大小</td>
 <td>可用空間</td>
 <td>文件系統(tǒng)</td>
 <td>序列號(hào)</td>
 <td>是否可用</td>
 <td>路徑</td>
 </tr>
 <%on error resume next
 For each drv in fso.Drives 
 Response.Write "<tr>" 
 Response.Write "<td>" & drv.DriveLetter & "</td>" 
 Response.write "<td>" & tran(drv.DriveType) & "</td>" 
 Response.write "<td>" & drv.VolumeName & "</td>" 
 Response.write "<td>" & FormatNumber(drv.TotalSize / 1024, 0)& "</td>" 
 Response.write "<td>" & FormatNumber(drv.Availablespace / 1024, 0) & "</td>" 
 Response.write "<td>" & drv.FileSystem & "</td>" 
 Response.write "<td>" & drv.SerialNumber & "</td>" 
 Response.write "<td>" & drv.IsReady & "</td>" 
 Response.write "<td>" & drv.Path & "</td>" 
 Response.Write "</tr>"Nextset fs=nothing%>
 </table>
  演示
  恩,是不是很神氣?那你可以對(duì)自己的機(jī)器調(diào)試,然后上傳到自己的空間去調(diào)試,你會(huì)發(fā)現(xiàn)服務(wù)商會(huì)你進(jìn)行了些設(shè)置:)
  當(dāng)然更神的還在后面面,比如對(duì)文件夾,對(duì)文件的操作(包括添加、修改和刪除)。
  ps:你對(duì)驅(qū)動(dòng)器是不能輕易添加刪除的:)


[page_break]
操作完驅(qū)動(dòng)器,接著就是來(lái)操作文件夾了。其中包括:提取文件夾信息、創(chuàng)建文件夾、刪除文件夾、復(fù)制文件夾、移動(dòng)文件夾等。下面就具體來(lái)看。
  一、fso.GetFolder
  一看就明白,是提取文件夾了。那具體是提取哪個(gè)文件夾呢?后面肯定要跟一個(gè)文件夾的路徑。提取出來(lái)了再來(lái)顯示該文件夾相關(guān)信息呢?是不是有要具體提取下去。所以,看程序:
  1,getfldr.asp

<%Set fso = CreateObject("Scripting.FileSystemObject")
Set fldr = fso.GetFolder("c:\Program Files")
Response.Write "父文件夾名字是:" & fldr & "<br>"
If fldr.IsRootFolder = True Then 
Response.Write "該文件夾是一根文件夾" & "<br>"
Else 
Response.Write "該文件夾不是根文件夾" & "<br>" 
End If
Response.Write "驅(qū)動(dòng)器名字是:" & fldr.Drive & "<br>"%>
  首先建立FSO組件的連接是必不可少的啦,然后Set fldr = fso.GetFolder("c:\Program Files")設(shè)定fldr對(duì)象被賦值,以作下面程序的引用。
  fldr.IsRootFolder即為判斷該文件夾是否為一根文件夾,值為布爾值(true or false);fldr.Drive則顯示該文件夾所在的驅(qū)動(dòng)器號(hào)了。
  二、fso.CreateFolder
  下面比較讓人激動(dòng)的是通過(guò)ASP建立文件夾了,你可以在你的權(quán)力范圍內(nèi)任意位置建立任意文件夾。
  2,creatfldr.asp

<%Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateFolder ("c:\cnbruce")
Response.Write "文件夾名為" & fso.GetBaseName("c:\cnbruce")%>
  執(zhí)行程序,應(yīng)該發(fā)現(xiàn)C盤(pán)多出了cnbruce文件夾,fso.GetBaseName則是提取文件夾名。
  三、fso.DeleteFolder
  通過(guò)ASP可以建立了文件夾,則同樣可以刪除文件夾。
  3,delfldr.asp

<%Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFolder("c:\cnbruce")
Response.Write "文件夾已刪除"%>
  發(fā)現(xiàn)剛建立的cnbruce文件夾確實(shí)已被刪除。
 
  那下面就采用一個(gè)通用程序來(lái)靈活應(yīng)變下。
  4,mainflr.asp

<%Sub CreateAFolder(file) 
Dim fso 
Set fso = CreateObject("Scripting.FileSystemObject") 
fso.CreateFolder(file) 
response.write "已經(jīng)建立了"&file
End Sub
Sub DeleteAFolder(file) 
Dim fso 
Set fso = CreateObject("Scripting.FileSystemObject") 
fso.DeleteFolder(file) 
response.write "已經(jīng)刪除了"&file
End Sub%>
<%subname=request.form("submit")
create=request.form("create")
del=request.form("del")
if subname<>"" then
 if create<>"" then
  call CreateAFolder(""&create&"")
  end if
   if del<>"" then
    call DeleteAFolder(""&del&"")
   end if
end if%>
 <form action="mainflr.asp" method="post">
 <input name="create">
 <input type="submit" value="建立" name="submit">
 </form>
 <hr>
 <form action="mainflr.asp" method="post"><input name="del">
 <input type="submit" value="刪除" name="submit">
 </form>
  需要注意的是:刪除并不會(huì)提示“確認(rèn)要放入回收站”這項(xiàng)。這點(diǎn)你需要謹(jǐn)慎處理,特別是對(duì)你的系統(tǒng)文件夾。


[page_break]
  四、fso.MoveFolder
  主要作用是進(jìn)行文件夾的移動(dòng),相當(dāng)于剪切粘貼動(dòng)作。
  5,movefldr.asp

<%Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateFolder ("c:\cnbruce")
fso.MoveFolder "c:\cnbruce", "C:\Program Files\"%>
<a href="C:\Program Files\">查看cnbruce文件夾有沒(méi)有移動(dòng)過(guò)來(lái)</a>
  格式:fso.MoveFolder "被移動(dòng)的文件夾","移動(dòng)到的文件夾"
  本程序先是在C盤(pán)下建立了cnbruce文件夾,然后將其移動(dòng)到C:\Program Files\文件夾下面。
  不過(guò)同樣需要注意的是你的系統(tǒng)文件夾不能亂移動(dòng)。
  五、fso.CopyFolder
  主要作用:將文件夾從某位置復(fù)制到另一位置。
  6,copyfldr.asp

<%Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFolder "c:\Program Files\cnbruce", "c:\"%>
<a href="C:\">查看cnbruce文件夾有沒(méi)有復(fù)制過(guò)來(lái)</a>
  該程序是建立在上一movefldr.asp的執(zhí)行結(jié)果基礎(chǔ)之上來(lái)完成復(fù)制到C盤(pán)根目錄下的。(話比較長(zhǎng)-_-!)
  當(dāng)然,其拷貝也是將該文件夾包括里面所以子文件夾和文件統(tǒng)統(tǒng)拷貝。
  到最后再試著將c:\Program Files\cnbruce和c:\cnbruce兩個(gè)文件夾進(jìn)行刪除掉吧。
  不過(guò),繼續(xù)提醒你:不要寫(xiě)錯(cuò)了,比如寫(xiě)成c:\Program Files,那你就慘了:這叫玩命,學(xué)ASP玩出心跳出來(lái)了。
  對(duì)文件夾的操作差不多了,是不是感到用處比較大?有訓(xùn)言:好東西是把雙刃劍。正義和邪惡就只一線間,注意正規(guī)合理利用該組件。不過(guò)還有你放心的是,現(xiàn)在網(wǎng)站空間服務(wù)商對(duì)這權(quán)力已經(jīng)限定得死死的了,你再怎么鬧翻也不會(huì)冒泡的:)
  然后接下來(lái)就是更微妙的:FSO對(duì)文件的操作。
FSO中除了可以對(duì)驅(qū)動(dòng)器、文件夾的操作以外,功能最強(qiáng)大的就是對(duì)文件的操作了。它可以用來(lái)記數(shù)、內(nèi)容管理、搜索還可生成動(dòng)態(tài)HTML頁(yè)面等等。
  一、fso.OpenTextFile
  無(wú)需多說(shuō),fso.OpenTextFile就是打開(kāi)某個(gè)文件了,一般情況之下是打開(kāi)的txt文本文件。所以首先我們先建立一個(gè)txt文件,然后通過(guò)FSO來(lái)讀取其中的內(nèi)容。
  1,info.txt

name:cnbrucesex:male
  建立了該文件,下面再做個(gè)ASP頁(yè)面,當(dāng)然最好兩個(gè)文件是在同一目錄下。
  2,opentxt.asp

<%whichfile=server.mappath("info.txt")
Set fso = CreateObject("Scripting.FileSystemObject")
Set txt = fso.OpenTextFile(whichfile,1)
rline = txt.ReadLine
rline = rline & "<br>" & txt.ReadLine
Response.Write rlinetxt.Close%>
  需要注意:無(wú)論是通過(guò)FSO打開(kāi)驅(qū)動(dòng)器、打開(kāi)文件夾、打開(kāi)文件,以及以后要接觸到的打開(kāi)數(shù)據(jù)庫(kù),都只能是打開(kāi)絕對(duì)物理路徑地址。但一般情況是上傳到空間服務(wù)商那,不能很直接地了解到自己文件的所在位置,所以強(qiáng)烈推薦使用server.mappath方法:平臺(tái)移植性強(qiáng),適用性強(qiáng)。
  CreateObject("Scripting.FileSystemObject")建立了FSO組件的連接,fso.OpenTextFile(whichfile,1)打開(kāi)了info.txt該文件。參數(shù)“1”表示“ForReading:以只讀方式打開(kāi)文件。不能寫(xiě)這個(gè)文件!保渌有參數(shù)“2”表示“ForWriting:以寫(xiě)方式打開(kāi)文件”,參數(shù)“8”表示“ForAppending:打開(kāi)文件并從文件末尾開(kāi)始寫(xiě)”。
  打開(kāi)了該文件,接下來(lái)是不是要顯示文件中的內(nèi)容?那就通過(guò)txt.ReadLine方法讀取文本中的一整行,如果需要繼續(xù)讀取下一行,則繼續(xù)使用txt.ReadLine方法。當(dāng)然初此還有其它的讀取方法,比如txt.Read(7)讀取指定數(shù)量的字符,txt.ReadAll返回文本中的全部?jī)?nèi)容。


[page_break]
  二、fso.CreateTextFile
  如fso.CreateFolder建立文件夾般,fso.CreateTextFile則是建立文件了。
  3,creattxt.asp

<%whichfile=server.mappath("info.txt")
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile(whichfile,True)
MyFile.WriteLine("My Name Is CN-Bruce")
MyFile.WriteLine("My Sex Is Male")
MyFile.Close%>
<a href="opentxt.asp">查看內(nèi)容</a>
  本次建立的文件是上一info.txt文件,fso.CreateTextFile(whichfile,True)其中的參數(shù)true即表示能覆蓋已有文件。建立后需要向里面添加數(shù)據(jù)就采用“MyFile.WriteLine”了。
  那現(xiàn)在就可以建立一個(gè)簡(jiǎn)單的文本記數(shù)器了,還記得以前的記數(shù)?:1,通過(guò)application、session、global.asa進(jìn)行記數(shù);2,通過(guò)Counter組件進(jìn)行記數(shù)。但兩者都有通病,就是不能保存,如果服務(wù)器重新啟動(dòng)后,是不是所有記數(shù)全部清空了呢:)那現(xiàn)在就可以使用文本來(lái)記錄數(shù)據(jù)了,即使重啟,下次提取的也還是該文件。
  試驗(yàn):文本計(jì)數(shù)器
  首先建立一記數(shù)的文本文件counter.txt,設(shè)定初始值為“1”
  4,counter.txt

1
  接著是記數(shù)的ASP文件,功能是顯示文本的記數(shù),本做加1的記數(shù),然后還要將新的記數(shù)寫(xiě)入文本文件。
  5,txtcount.asp

<%whichfile=server.mappath("counter.txt")’打開(kāi)文件并將其值讀取,最后關(guān)閉連接釋放資源
set fso=createobject("Scripting.FileSystemObject")
set openfile=fso.opentextfile(whichfile,1)
visitors=openfile.readline
openfile.close’頁(yè)面顯示記數(shù)內(nèi)容并做加1運(yùn)算
response.write "您是本頁(yè)的第"&visitors&"位訪客"
visitors=visitors+1’將新的數(shù)值添加寫(xiě)入到文本,最后關(guān)閉所有連接釋放資源
set creatfile=fso.createtextfile(whichfile)
creatfile.writeLine(visitors)
creatfile.close
set fso=nothing%>
  那根據(jù)這個(gè)可以繼續(xù)地?cái)U(kuò)展內(nèi)容:比如讓記數(shù)用數(shù)字圖片顯示。當(dāng)然前提就是你需要0-9的10張記數(shù)圖片,并將此圖片放于img文件夾中。
  下為一增強(qiáng)的txtcount.asp內(nèi)容代碼。

<%whichfile=server.mappath("counter.txt")
set fso=createobject("Scripting.FileSystemObject")
set openfile=fso.opentextfile(whichfile,1)
visitors=openfile.readline
openfile.close
CountLen=len(visitors)
response.write "您是本頁(yè)的第"
for i=1 to 6-countLen ’表示最大值999999 
response.write "<img src=http://edu.chinaz.com/Get/Program/Asp/img/0.gif></img>"
next 
for i=1 to countlen 
response.write "<img src=img/" & mid(visitors,i,1) & ".gif></img>"
next
response.write "位訪客"
visitors=visitors+1
set creatfile=fso.createtextfile(whichfile)
creatfile.writeLine(visitors)
creatfile.closeset
fso=nothing%>


[page_break]
  本程序中采用的是mid函數(shù),該函數(shù)的作用是返回某字符串中從第幾位字符開(kāi)始的幾個(gè)字符。格式即為:Mid(string,start,length)

<script language=vbs>
cn_string= "cnbruce love cnrose"
cn_start = 9
cn_length = 4
alert (mid(cn_string,cn_start,cn_length))
</script>
學(xué)會(huì)了FSO提取文件值,也學(xué)會(huì)了將信息輸入到文件中,那下面就再來(lái)應(yīng)用應(yīng)用下。
  不知道你有沒(méi)有這樣的習(xí)慣:看到一個(gè)文件,不自覺(jué)的右鍵選擇用記事本打開(kāi)。呵呵,幾乎沒(méi)有哪個(gè)文件是不可以的。所以現(xiàn)在,可以默認(rèn)所有文件都是文本,只是后綴名不同而已;那么也就是說(shuō),現(xiàn)在可以提取任一文件的內(nèi)容信息。OK,就來(lái)想象一下:
  1,提取一個(gè)文件的路徑(采用file按鈕進(jìn)行查找定位)
  2,將該路徑文件打開(kāi),并讀取所有行
  3,顯示讀取的信息
  一、viewcode.asp

<%Function ShowCode(filename) 
Set fso = Server.CreateObject("Scripting.FileSystemObject") 
Set cnrs = fso.OpenTextFile(filename, 1) 
While Not cnrs.AtEndOfStream 
rsline = cnrs.ReadLine 
rsline = server.HTMLEncode(rsline) 
Response.Write(rsline & "<br>") 
Wend
end Function%>
<form action="viewcode.asp" method="post">輸入文件名
<input type="file" name="filename">
<input type="submit" value="查看源程序">
</form>
<%file=request.form("filename")
response.write (file & "源程序如下<hr>")
If trim(file)<> "" then 
Call ShowCode(file)
End If%>
  以上程序調(diào)試時(shí),可以選擇html,asp頁(yè)面,也可以打開(kāi)任一應(yīng)用程序等。
  定義的ShowCode函數(shù),主要作用是打開(kāi)、讀取并顯示文件中所有信息內(nèi)容。注意添加了server.HTMLEncode(rsline),針對(duì)含有標(biāo)準(zhǔn)HTML代碼的文件。
  顯示文件中所有行即用一條件循環(huán)進(jìn)行遍歷顯示了。

While Not cnrs.AtEndOfStream...Wend


[page_break]
  接著,下面的這個(gè)例題具體就涉及open方法的問(wèn)題了,還記得?正常情況之下打開(kāi)文件是采用fso.OpenTextFile("c:\testfile.txt",1),參數(shù)1的作用是:以只讀模式打開(kāi)文件。不能對(duì)此文件進(jìn)行寫(xiě)操作。如果現(xiàn)在已經(jīng)存在一文件,需要進(jìn)行追加寫(xiě)入,則該怎么辦呢?簡(jiǎn)單,參數(shù)為8即可。
  這有什么用呢?呵呵,亞瑪遜的網(wǎng)絡(luò)故事接龍就是如此:能接龍就需要首先要顯示原有故事,然后自己添加故事寫(xiě)入文件。這其中的寫(xiě)入文件最講究的就是追加寫(xiě)入了。所以下面就可以實(shí)現(xiàn)。
  二、story.asp

<%If not request.Form("NextLine")="" then 
Set fso=Server.CreateObject("Scripting.FileSystemobject") 
textfile1=Server.MapPath("story.txt") 
set cnrs=fso.OpenTextFile(textfile1,8) 
cnrs.WriteLine(Request.Form("NextLine")) 
cnrs.Close
end if
%>故事如下:<%
Set fso=Server.CreateObject("Scripting.FileSystemObject")
textfile1=Server.MapPath("story.txt")
set cnrs=fso.OpenTextFile(textfile1,1)
while not cnrs.AtEndOfStream 
Response.Write " " & cnrs.ReadLinewend
cnrs.close%>
<hr>
<form method="post" action="story.asp">請(qǐng)輸入這個(gè)故事的新行:
<input name="NextLine" type="text" size="70">
<input type="submit" value="提交"></form>
  整個(gè)就是一很簡(jiǎn)單的讀取信息和加入信息的混合利用,相信有了前面的基礎(chǔ)看懂應(yīng)該不成問(wèn)題。當(dāng)然還缺少個(gè)story.txt文件,里面寫(xiě)好故事開(kāi)頭就可以了。
  調(diào)試
  再下面,繼續(xù)來(lái),該側(cè)重點(diǎn)主要就是練習(xí)一些函數(shù)的使用技巧了。
  1,instr函數(shù):返回某字符串在另一字符串中第一次出現(xiàn)的位置。
  比如現(xiàn)在查找字母“A”在字符串“A110B121C119D1861”中第一次出現(xiàn)的位置,則可以

<script language=vbs>
my_string = "A110B121C119D1861"
a_num = instr(my_string,"A")
alert(a_num)
</script>
  同樣字母“B”的位置也就能確定,F(xiàn)在就來(lái)最關(guān)鍵的:提前字母“A”和“B”中間的值“110”。
  還記得mid函數(shù)嗎?mid函數(shù)的主要作用是:從字符串中返回指定數(shù)目的字符。
  比如現(xiàn)在的“110”則應(yīng)該是從字符串的第2位取得3個(gè)單位的值。

[page_break]
<script language=vbs>
my_string = "A110B121C119D1861"
a_value = mid(my_string,2,3)
alert(a_value)
</script>
  但設(shè)想一下:如果不是“110”,而是“1100”,那是不是要提取4位……這樣就顯出程序的不夠完美。
  所以繼續(xù)思考:所提取的值,永遠(yuǎn)是在字母“A”后面的,且值也永遠(yuǎn)是在字母“A”和“B”之間的,那么只要分別提取出“A”、“B”的位置,則中間數(shù)值的起始位應(yīng)是字母“A”位+1,中間數(shù)值的長(zhǎng)度應(yīng)是字母“B”位-字母“A”位-1
  那么現(xiàn)在就可以讓程序完美起來(lái):

<script language=vbs>
my_string = "A110B121C119D1861"
a_num = instr(my_string,"A")
b_num = instr(my_string,"B")
a_value = mid(my_string,a_num+1,b_num-a_num-1)
alert(a_value)
</script>
  OK,那么現(xiàn)在你也就完全可以把字母“B”、“C”、“D”后面的值一一提取了。
  當(dāng)然需要注意的就是“D”后面有幾位怎么取呢?采用字符串總長(zhǎng)度-字母D所在位置數(shù)就可以了。

<script language=vbs>
my_string = "A110B121C119D1861"
a_num = instr(my_string,"A")
b_num = instr(my_string,"B")
c_num = instr(my_string,"C")
d_num = instr(my_string,"D")
total_num = len(my_string)
a_value = mid(my_string,a_num+1,b_num-a_num-1)
b_value = mid(my_string,b_num+1,c_num-b_num-1)
c_value = mid(my_string,c_num+1,d_num-c_num-1)
d_value = mid(my_string,d_num+1,total_num-d_num)
alert(a_value)
alert(b_value)
alert(c_value)
alert(d_value)
</script>


[page_break]
  用到現(xiàn)在,你也許確實(shí)學(xué)到了不少,但也許會(huì)提出疑問(wèn):這個(gè)放在FSO文件操作里有什么作用呢?
  那下面才是我們的正題:用FSO進(jìn)行簡(jiǎn)單的文本投票。
  投票頁(yè)面首要的就是顯示各類項(xiàng)目的投票數(shù),并相應(yīng)賦于某個(gè)變量。然后判斷本次投票的選相,相對(duì)應(yīng)地將投票數(shù)值加1,完畢后再將所有值繼續(xù)寫(xiě)入文本。
  1,一個(gè)HTML表單頁(yè)website.html
  以做投票點(diǎn)擊的平臺(tái)。
用到現(xiàn)在,你也許確實(shí)學(xué)到了不少,但也許會(huì)提出疑問(wèn):這個(gè)放在FSO文件操作里有什么作用呢?
那下面才是我們的正題:用FSO進(jìn)行簡(jiǎn)單的文本投票。

<form action="result.asp" method="post">
<input type="radio" name="website" value="A" checked> cnbruce.com<br><input type="radio" name="website" value="B"> blueidea.com<br><input type="radio" name="website" value="C"> it365cn.com<br><input type="radio" name="website" value="D"> 5d.cn<br><input type="submit"><input type="reset">
  2,接受表單頁(yè)值的result.asp

<%whichfile=server.mappath("site.txt")
set fso=createobject("Scripting.FileSystemObject")
set thisfile=fso.opentextfile(whichfile)
my_string=thisfile.read
linea_num = instr(my_string,"A")
b_num = instr(my_string,"B")
c_num = instr(my_string,"C")
d_num = instr(my_string,"D")
total_num = len(my_string)
a_value = mid(my_string,a_num+1,b_num-a_num-1)
b_value = mid(my_string,b_num+1,c_num-b_num-1)
c_value = mid(my_string,c_num+1,d_num-c_num-1)
d_value = mid(my_string,d_num+1,total_num-d_num)
select case request.form("website") 
case "A": a_value=a_value+1 
case "B": b_value=b_value+1 
case "C": c_value=c_value+1 
case "D": d_value=d_value+1
end select
mynew_string="A" & cstr(a_value) & "B" & cstr(b_value) & "C" & cstr(c_value) & "D" & cstr(d_value)
set newfile=fso.createtextfile(whichfile)
newfile.writeLine(mynew_string)
newfile.closeset fso=nothing%>當(dāng)前投票:<br>cnbruce.com:<%=a_value%>
<br>blueidea.com:<%=b_value%><br>
it356cn.com:<%=c_value%><br>
5d.cn:<%=d_value%><br>
<a href="website.html">返回繼續(xù)</a>
  有了上面函數(shù)的基礎(chǔ),看這個(gè)應(yīng)該不是很難的。
  3,最后不要忘了的記數(shù)文件site.txt
  格式:A1B1C1D1
  調(diào)試
  OK,三個(gè)文件就可以勝任一個(gè)很簡(jiǎn)單的投票系統(tǒng)了,如果要加強(qiáng),需要細(xì)化的則結(jié)合以前的知識(shí)吧,比如投過(guò)一次后設(shè)置session或者cookies,當(dāng)再次投票時(shí)候判斷如果session或者cookies存在則不允許,也就是簡(jiǎn)單的投票防作假手段了……當(dāng)然更多的還是要自己去想去實(shí)踐了。


[page_break]
 一,fso.GetFile
  提取文件相應(yīng)的 File 對(duì)象
  1,getfile.asp

<%whichfile=Server.MapPath("cnbruce.txt")
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.CreateTextFile(whichfile,true)
f1.Write ("This is a test.My Name is cnbruce.")
f1.CloseSet f2 = fso.GetFile(whichfile) 
s = "文件名稱:" & f2.name & "<br>"
s = s & "文件短路徑名:" & f2.shortPath & "<br>"
s = s & "文件物理地址:" & f2.Path & "<br>"
s = s & "文件屬性:" & f2.Attributes & "<br>"
s = s & "文件大。 " & f2.size & "<br>"s = s & "文件類型: " & f2.type & "<br>"
s = s & "文件創(chuàng)建時(shí)間: " & f2.DateCreated & "<br>"
s = s & "最近訪問(wèn)時(shí)間: " & f2.DateLastAccessed & "<br>"
s = s & "最近修改時(shí)間: " & f2.DateLastModified
response.write(s)%>
  其效果正如右鍵某文件,看到的具體屬性信息。
  其中Attributes返回的數(shù)值“32”表示:(Archive)上次備份后已更改的文件?勺x寫(xiě)。
  其它值附錄如下:

Normal 0 普通文件。 沒(méi)有設(shè)置任何屬性。 
ReadOnly 1 只讀文件。 可讀寫(xiě)。 
Hidden 2 隱藏文件。 可讀寫(xiě)。 
System 4 系統(tǒng)文件。 可讀寫(xiě)。 
Directory 16 文件夾或目錄。 只讀。 
Archive 32 上次備份后已更改的文件。 可讀寫(xiě)。 
Alias 1024 鏈接或快捷方式。 只讀。 
Compressed 2048 壓縮文件。 只讀。 
  二,file.move
  作用將指定的文件或文件夾從某位置移動(dòng)到另一位置。其實(shí)該方法仍然屬于fso.GetFile后的一個(gè)應(yīng)用。
  2,movefile.asp
<%whichfile=Server.MapPath("cnbruce.txt")
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.CreateTextFile(whichfile,true)
f1.Write ("This is a test.My Name is cnbruce.")
f1.CloseSet f2 = fso.GetFile(whichfile)
f2.Move "C:\"%>
<a href="C:\">查看下有沒(méi)有</a>
  簡(jiǎn)單的剪切粘貼的功能實(shí)現(xiàn)。
  三,F(xiàn)ile.Copy
  同樣屬于fso.GetFile后的一個(gè)應(yīng)用。就只是單純地拷貝文件到某位置。
  3,copyfile.asp

<%whichfile=Server.MapPath("cnbruce.txt")
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.CreateTextFile(whichfile,true)
f1.Write ("This is a test.My Name is cnbruce.")
f1.CloseSet f2 = fso.GetFile(whichfile)
f2.Copy "D:\"%>
<a href="D:\">查看下有沒(méi)有</a>
  和本ASP頁(yè)面同在目錄下的cnbruce.txt文件依然存在。


[page_break] 
  四,file.Delete
  很顯然,就是直接刪除文件了。
  4,delfile.asp

<%whichfile=Server.MapPath("cnbruce.txt")
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.CreateTextFile(whichfile,true)
f1.Write ("This is a test.My Name is cnbruce.")
f1.Close
Set f2 = fso.GetFile(whichfile)
f2.move "d:\"Set
 f3 = fso.GetFile("d:\cnbruce.txt")
f3.delete 
%>
<a href="d:\">查看下是沒(méi)有該文件的</a>
  當(dāng)然FSO還沒(méi)有結(jié)束,比如上傳文件,ASP轉(zhuǎn)HTML等都需要用到FSO。





相關(guān)文章