ASP中FSO控件的使用方法

爲了使用FSO來執行所有的工作,首先要創建對象,代碼就象下面這樣:

   < %
Set fso = Server.CreateObject("Scripting.FileSystemObject")
% >

   這樣就建立了FSO並且賦予變量fso,接着就可以使用熟悉的object.method語法來執行文件系統的操作〔查看Visual Basic文檔,獲取更多的關於對象和對象嚮導編程的知識〕。在這裏,我們可以使用fso.method 或者 fso.property,這些將在下面的例子中看到。

   FSO模型位於由微軟提供的腳本運行時間DLL文件中,它是scrrun.dll。你可以在任何應用程序中引用這個DLL文件,比如MS Access,Word。 就是說,並非僅僅限制在ASP中應用它。

   這裏有一個簡要的FSO方法列表:

   FSO方法
CopyFile 拷貝一個或者多個文件到新路徑
CreateTextFile 創建文件並且返回一個TextStream對象
DeleteFile 刪除一個文件
OpenTextFile 打開文件並且返回TextStream對象,以便讀取或者追加

   如果想了解完整的FSO方法與屬性,請查閱微軟MSDN。下面來看幾個例子。

   假設你想創建一個簡單的留言簿,你可以建立一個數據庫,在其中存儲用戶的信息。然而,如果並不需要數據庫的強大功能,使用FSO來存儲信息將節省你的時間和金錢。並且,一些ISP也許限制了web上的數據庫應用。

   假設你在一個表單中收集了一些用戶信息,這裏是一個簡單表單HTML代碼:

'< html>
'< body>
'< form action="formhandler.asp" method="post">
'< input type="text" size="10" name="username">
'< input type="text" size="10" name="homepage">
'< input type="text" size="10" name="Email">
'< /form>
'< /body>
'< /html>
實際操作時,請將上述文字前面的'符號去掉.

   再看看formhandler.asp中處理表單的代碼:

< %
' Get form info
strName = Request.Form("username")
strHomePage = Request.Form("homepage")
strEmail = Request.Form("Email")

' create the fso object
Set fso = Server.CreateObject("Scripting.FileSystemObject")

   上述幾句話的意思是獲取表單域的值並且賦值到變量。如果你不是很瞭解的話,可以看看本站ASP自學部分.下面的代碼就是寫文件了:

path = "c: emp est.txt"
ForReading = 1, ForWriting = 2, ForAppending = 3

' open the file
set file = fso.opentextfile(path, ForAppending, TRUE)

' write the info to the file
file.write(strName) & vbcrlf
file.write(strHomePage) & vbcrlf
file.write(strEmail) & vbcrlf

' close and clean up
file.close
set file = nothing
set fso = nothing


   回想一下,OpenTextFile方法返回一個TextStream對象,它是FSO模型中的另外一個對象。TextStream對象揭示了操作文件內容的方法,比如寫、讀一行、跳過一行。VB常量vbcrlf產生一個換行符。

   在OpentextFile的命令參數中定義了TRUE,這就告訴了系統,如果文件不存在,就創建它。如果文件不存在,並且沒有定義TRUE參數,就會出錯。

   現在轉到目錄c: emp,打開test.txt,你可以看到如下的信息:

User's name
User's home page
User's email

   當然,這些單詞可以被輸入在表單中的任何內容所替換。

   現在已經有了一些用戶信息保存在文件中,就像一個簡單的數據庫。假設有一個用戶想了解所有的訪問者,就要從登
記的信息中分離出相關部分,因爲沒有象數據庫一樣擁有結構化的列。
   我們知道,在所創建的文件中,第1行是用戶名,第2行是他們的主頁,第3行是他們的電子郵件地址。隨後登記的用
戶也是按照這樣的結構存儲他們的信息,所以每3行將包含一個用戶的登記信息。知道了這些,就可以編寫下面的代碼來顯
示信息:

< %
' create the fso object
set fso = Server.Createobject("Scripting.FileSystemObject")
path = "c: emp est.txt"

' open the file
set file = fso.opentextfile(path, 1) < -- For
reading

   接着,分析每一行,並且格式化數據:

do until file.AtEndOfStream
Response.write("Name: " & file.ReadLine & " ")
Response.write("Home Page: " & file.ReadLine & " ")
Response.write("Email: " & file.ReadLine & "< p>")
loop

' close and clean up
file.close
set file = nothing
set fso = nothing
%>

   這裏僅僅做了一個非常簡單的輸出,但是你可以根據情況包含表格或者DHTML表單信息。

   如果已經正確地建立並寫入了文件,上面的小小循環將合適地列出數據庫中的每一個人的信息。ReadLine方法讀取1
行內容,直到遇到換行符,隨後的ReadLine調用將讀取下一行。AtEndOfStream是TextStream對象的屬性,它告訴我們何時
遇到文件的尾部。

   假設由於某種原因,我們沒有正確地形成文件,如果一個用戶只有2行信息而不是3行,那麼就會產生一些錯誤。我們
這裏的循環取回文件中的下3行信息,如果沒有3行多的信息,就將出現如下的錯誤信息:

   Server object error 'ASP 0177 : 800a003e'

   所以,一定要添加一些錯誤處理代碼,以防文件中插入了多餘的行或者少了必要的行信息。

   上面討論了基本知識,然後說說權限許可的問題。FSO以創建它的用戶帳戶權限運行,換言之,如果有人從Internet
上訪問你的頁面,那麼這個internet帳戶就創建FSO。如果以administrator的身份登錄計算機,並且登錄頁面,那麼
administrator帳戶就創建了FSO。這是非常重要的,因爲一定的帳戶擁有一定的權限,並且FSO需要一些權限從而能完整的
執行功能。
   internet帳戶(IUSER_MachineName,MachineName是服務器的名字)一般只擁有讀權限,這意味着用戶將不能寫入留
言簿文件。然而,有幾個選擇可以繞過這個問題。

   首先,也是很困難的,是要求用戶在填寫留言簿前登錄到服務器。然而,留言簿的要點是從匿名用戶處收集信息,如
果要求用戶登錄,就必須要知道他們是誰。因此,跳過這個選擇,看下一個。

   第2個方法是創建一個目錄或者文件,IUSER_MachineName用戶對此有寫權限。這樣做可能開放了一些潛在的安全漏
洞,因爲任何知道正確目錄並具備一定web技巧的人就能在服務器上填充內容。這是一個很嚴重的禁忌。所以你必須確認在
隱藏的場所保存了這些可寫目錄的信息,並且儘可能地將這些目錄設置在web目錄結構以外(比如在Windows下,這是一個
不在inetpub目錄下的一個目錄)。

   你也許想:好,現在我知道如何寫入文件了。但能做到更多一些嗎?下面來試一試爲web站點建立一個搜索功能。
   建立搜索引擎的關鍵是遞歸。主要地,編寫一段代碼搜索目錄下的文件,然後對所有的目錄循環執行同樣的代碼。因爲不能確定總共有多少個子目錄,所以必須一遍又一遍地執行搜索代碼,直到結束。遞歸調用非常好!  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章