農(nóng)公子網(wǎng)站建設(shè)公司專注企業(yè)網(wǎng)站建設(shè),關(guān)鍵詞排名優(yōu)化,長尾詞霸屏系統(tǒng)!
打開客服菜單
定制建站品牌網(wǎng)頁設(shè)計
南寧公司網(wǎng)站建設(shè)首頁 > 技術(shù)支持 > FSO是什么?它有何作用用途及使用缺陷?
FSO是什么?它有何作用用途及使用缺陷?
編輯 :

網(wǎng)站建設(shè)

時間 : 2020-02-07 10:10 瀏覽量 : 41

在ASP中,F(xiàn)SO的意思是File System Object,即文件系統(tǒng)對象。我們將要操縱的計算機(jī)文件系統(tǒng),在這里是指位于web服務(wù)器之上。所以,確認(rèn)你對此擁有合適的權(quán)限。理想情況下,你可以在自己的機(jī)器上建立一個web服務(wù)器,這樣就能方便地進(jìn)行測試。如果運(yùn)行于Windows平臺,請試一試微軟公司的免費(fèi)個人Web服務(wù)器PWS。FSO對象包括 :驅(qū)動器對象(Drive Object)用來存取本地盤或網(wǎng)絡(luò)盤,文件系統(tǒng)對象(FielSystemObject 簡稱FSO)是用來存取文件系統(tǒng),文件夾對象(Folder Object)用于存取文件夾的各種屬性 ,文本流對象(TextStream Object 簡稱TS)存取文件內(nèi)容 。


在使用以上對象,你的確可以在一臺電腦上為所欲為,但同樣也可能會造成災(zāi)難,所以在使用FSO的時候要注意安全,特別是在Web應(yīng)用中,Web服務(wù)器中會存儲諸如用戶信息,日志文件等等重要信息,更要格外小心。如何使用FSO? 要開始干“壞事”之前,首先要學(xué)會建立FSO。如果你曾經(jīng)在ASP中創(chuàng)建過對象,那么這事好辦: <% Set fso = Server.CreateObject("Scripting.FileSystemObject") %> ?,F(xiàn)在我們已經(jīng)建立了FSO,并賦值給變量fso,接下來就可以使用我們熟悉的object.method方法來使用它了(如果你對對象的操作不熟悉,請自己去補(bǔ)課,這里恕不奉陪)。

seo優(yōu)化技術(shù)

在下面的例子中,主要使用的是fso.method和fso.property。 (FSO模塊來自微軟提供的腳本運(yùn)行庫scrrun.dll中,許多應(yīng)用系統(tǒng)都會調(diào)用它,例如Access,Word等等,并非專為ASP應(yīng)用開發(fā)。) 下面是我們要用到的部分FSO方法: CopyFile 拷貝一個或多個文件 ,CreateTextFile 創(chuàng)建一個文件并返回一個TS對象 ,DeleteFile 刪除一個文件 ,OpenTextFile 打開一個文件并返回一個可用于讀和添加的TS對象。 要獲得完整的FSO方法,請參看MSDN,下面看個例子吧。好,現(xiàn)在我們的guestbook里已經(jīng)存儲了不少用戶的信息了,如果這時一個用戶想看看我們訪客的信息,我們得把信息再還原出來。由于不是數(shù)據(jù)庫,得自己動手來解決分段問題??纯磘est.txt,每三行就是一個用戶的信息,好辦: 


<% 
' 建立fso對象 
set fso = Server.Createobject("Scripting.FileSystemObject") 
path = "c:temptest.txt" 
'打開文件 
set file = fso.opentextfile(path, 1) <-- 用于讀 
do until file.AtEndOfStream 
Response.write("Name: " & file.ReadLine & " ") 
Response.write("Home Page: " & file.ReadLine & " ") 
Response.write("Email: " & file.ReadLine & "<p>") 
loop 
' 關(guān)閉并清除 
file.close 
set file = nothing 
set fso = nothing 

%> 


(這里我們只是將信息簡單輸出,你可以根據(jù)實(shí)際情況作調(diào)整,包括輸出到表格和DHTML form中。) ReadLine方法用于從文件中讀取一行,下次調(diào)用ReadLine方法將讀取下一行。AtEndOfStream是TS對象的一個屬性,讓你知道是否到達(dá)文件結(jié)尾。 假設(shè)由于某種原因文件有問題,例如某個用戶只有兩行,那么我們會得到以下錯誤信息: Server object error 'ASP 0177 : 800a003e' ,所以加入一些錯誤處理代碼是必要的?,F(xiàn)在我們已經(jīng)對FSO有一些基本認(rèn)識了,是時候來討論一下FSO的權(quán)限問題。FSO的讀取權(quán)限就是創(chuàng)建FSO的賬號所擁有的權(quán)限。如果某人從Internet上使用這個頁面,那么創(chuàng)建FSO的就是Internet賬號。


如果你用administrator本機(jī)登錄并訪問頁面,那么建立的FSO就擁有administrator的權(quán)限。 Internet賬號(IUSER_機(jī)器名)通常只有讀權(quán)限,這意味著用戶永遠(yuǎn)無法寫guestbook文件。所以必須想辦法解決。 第一個辦法,是讓用戶首先要用一個有寫權(quán)限的賬號登錄。但實(shí)際上所有從Internet訪問的用戶都是以anonymous登錄,所以這個方法比較難實(shí)現(xiàn)。 第二個方法是建立一個允許賬號為 IUSER_機(jī)器名 的用戶讀寫的目錄。但這樣可能會帶來安全漏洞。如果這個目錄讓黑客知道了,就可以往里面寫一些代碼并通過某種方式運(yùn)行它,那你就慘了。所以最好將這個目錄建立在Web路徑之外(也就是inetpub路徑之外)。 

seo優(yōu)化技術(shù)2

現(xiàn)在讓我們來做更進(jìn)一步的工作,用FSO在我們的Web站點(diǎn)上實(shí)現(xiàn)search功能,建立搜索引擎的關(guān)鍵是遞歸。 首先來建立搜索頁面。假設(shè)我們已經(jīng)給用戶提供了一個輸入搜索字符串的頁面。 
Dim objFolder 
Dim strSearchText 
Dim objFSO 
strSearchText = Request.Form("SearchText") <-- 搜索字符串 
' 建立 FSO 和文件夾對象 
Set fso = Server.CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFSO.GetFolder(Server.MapPath("/")) 

Search objFolder 


上面的代碼只是進(jìn)行了一些變量初始化工作,真正的serach工作由下面這個Search函數(shù)執(zhí)行。 


Function Search(objFolder) 
Dim objSubFolder 
'循環(huán)搜尋當(dāng)前文件夾中的每個文件 
For Each objFile in objFolder.Files 
Set objTextStream = objFSO.OpenTextFile(objFile.Path,1) <-- For Reading 
'把文件內(nèi)容讀入一個變量 

strFileContents = objTextStream.ReadAll 

seo優(yōu)化技術(shù)3

'如果在文件中找到該字符串,寫個指到該文件的鏈接 
If InStr(1, strFileContents, strSearchText, 1) then 
Response.Write "<A href="/oblog3/"/" & objFile.Name &""">" & objFile.Name & "</A><BR>" 
bolFileFound = True 
End If 
objTextStream.Close 

Next 


'以下是遞歸部分 
' 如果其中有子目錄,再調(diào)用Search函數(shù) 
For Each objSubFolder in objFolder.SubFolders 
Search objSubFolder 
Next 

End Function 

南寧公司網(wǎng)站建設(shè)

該程序會自動搜索Web root目錄以下的所有子目錄,還不錯吧? (FSO要使用物理絕對路徑,而不是Web Path的相對路徑。例如,要打開的是c:inetpubwwwroottempindex.html,而不能是www.enfused.com/temp/index.html 或 /temp/index.html。要將后一種路徑轉(zhuǎn)換為物理絕對路徑,使用Server.MapPath("filename")。) FSO還是存在一些弱點(diǎn)。例如,它在處理二進(jìn)制文件的時候就不那么方便。對于象MS Word文檔,圖像等許多文件,你只能執(zhí)行移動,刪除等操作,而不能打開,讀/寫。當(dāng)然,F(xiàn)SO提供了另外一套操作它們的方法(具體請參考MSDN),但始終不如我們慣用的open方法那么順手。 


另一個不足與文件大小有關(guān)。由于FSO操作需要經(jīng)常地將文件內(nèi)容讀入內(nèi)存,文件有多大,就需要多少內(nèi)存,所以如果你要處理大文件或一大堆小文件的話,內(nèi)存的開銷會很可觀,可能會對系統(tǒng)運(yùn)行速度有影響。解決辦法是將大文件分段處理,并記住經(jīng)常地清除內(nèi)存(把變量設(shè)為null或"",set 對象=nothing)。 此外,F(xiàn)SO不能改變文件和文件夾的屬性。例如,在建立guestbook的例子中,其實(shí)有一個安全機(jī)制我們沒有實(shí)現(xiàn),就是將保存信息的文件的屬性設(shè)為只讀,只有在更新的時候才臨時改為可寫,寫完后再改回只讀,許多用CGI或Perl寫的guestbook程序都有這種功能,可惜用FSO無法實(shí)現(xiàn)該功能。 

南寧公司網(wǎng)站建設(shè)3

  • 超低建站費(fèi)用

  • 具備營銷能力

  • 強(qiáng)大SEO功能

  • 貼心售后技術(shù)支持

cache
Processed in 0.010405 Second.