標籤: 暫無標籤

fso所屬現代詞,指的是微軟ASP的一個對文件操作的控制項,該控制項可以對伺服器進行讀取、新建、修改、刪除目錄以及文件的操作。

fsofso
FSO(File System Object)是微軟ASP的一個對文件操作的控制項,該控制項可以對伺服器進行讀取、新建、修改、刪除目錄以及文件的操作。是ASP編程中非常有用的一個控制項。但是因為許可權控制的問題,很多虛擬主機伺服器的FSO反而成為這台伺服器的一個公開的後門,因為客戶可以在自己的ASP網頁裡面直接就對該控制項編程,從而控制該伺服器甚至刪除伺服器上的文件。因此不少業界的虛擬主機提供商都乾脆關掉了這個控制項,讓客戶少了很多靈活性。

1 fso -基本簡介

fsofso
在ASP中,FSO的意思是File System Object,即文件系統對象。將要操縱的計算機文件系統,在這裡是指位於web伺服器之上。所以,確認你對此擁有合適的許可權。理想情況下,你可以在自己的機器上建立一個web伺服器,這樣就能方便地進行測試。如果運行於Windows平台,請試一試微軟公司的免費個人Web伺服器PWS。

FSO模型對象:

Drive Object:驅動器對象供存取磁碟或者網路驅動器;
File System Object Object:文件系統對象供存取計算機的文件系統;
Folder Object:文件夾對象供存取文件夾的所有屬性;
Text Stream Object:文本流對象供存取文件內容。

可以使用上面的對象做計算機上的任何事情,也包括破壞活動。所以,請小心使用FSO。在web環境中,存儲信息是非常重要的,比如用戶信息,日誌文件等。FSO提供了一個強大且簡單的方法高效率地保存數據。在這篇文章裡面,著重討論File System Object和Text Stream對象。FSO由微軟公司提供支持,對於非Windows系統,不能再使用ASP。

2 fso -使用方法

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

fsofso

 

 


這樣就建立了FSO並且賦予變數fso,接著就可以使用熟悉的object.method語法來執行文件系統的操作〔查看VisualBasic文檔,獲取更多的關於對象和對象嚮導編程的知識〕。在這裡,可以使用fso.method或者fso.propert

fsofso
y,這些將在下面的例子中看到。

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

FSO方法一個簡要的FSO方法列表:

Copy File拷貝一個或者多個文件到新路徑;
Create Text File創建文件並且返回一個Text Stream對象;
Delete File刪除一個文件;
Open Text File打開文件並且返回Text Stream對象,以便讀取或者追加。如果想了解完整的FSO方法與屬性,請查閱微軟MSDN。

3 fso -許可權許可

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

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

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

4 fso -文件讀取

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

<%
  'createthefsoobject
  setfso=Server.Createobject("Scripting.FileSystemObject")
  path="c:empest.txt"
  'openthefile
  setfile=fso.OpenTextFile(path,1)<--For
  reading

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

dountilfile.AtEndOfStream
  Response.write("Name:"&file.ReadLine&"")
  Response.write("HomePage:"&file.ReadLine&"")
  Response.write("Email:"&file.ReadLine&"")
  loop
  'closeandcleanup
  file.close
  setfile=nothing
  setfso=nothing

%>

這裡僅僅做了一個非常簡單的輸出,可以根據情況包含表格或者DHTML表單信息。如果已經正確地建立並寫入了文件,上面的小小循環將合適地列出資料庫中的每一個人的信息。ReadLine方法讀取1行內容,直到遇到換行符,隨後的Read Line調用將讀取下一行。At End Of Stream是Text Stream對象的屬性,何時遇到文件的尾部。假設由於某種原因,沒有正確地形成文件,如果一個用戶只有2行信息而不是3行,那麼就會產生一些錯誤。這裡的循環取迴文件中的下3行信息,如果沒有3行多的信息,就將出現如下的錯誤信息:Serverobjecterror'ASP0177:800a003e' 所以,一定要添加一些錯誤處理代碼,以防文件中插入了多餘的行或者少了必要的行信息。

5 fso -文件寫入

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

fsofso

 

 

 

 

 

 

 

 

 

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

<%
  'Getforminfo
  strName=Request.Form("username")
  strHomePage=Request.Form("homepage")
  strEmail=Request.Form("Email")
  'createthefsoobject
  Setfso=Server.CreateObject("Scripting.FileSystemObject")
迄今為止,還沒有新鮮的東西,無非是獲取表單域的值並且賦值到變數。下面出現了有趣的部分-寫文件:
  path="c:empest.txt"
  ForReading=1,ForWriting=2,ForAppending=3
  'openthefile
  setfile=fso.opentextfile(path,ForAppending,TRUE)
  'writetheinfotothefile
  file.write(strName)&vbCrLf
  file.write(strHomePage)&vbcrlf
  file.write(strEmail)&vbcrlf
  'closeandcleanup
  file.close
  setfile=nothing
  setfso=nothing
OpenTextFile方法返回一個TextStream對象,它是FSO模型中的另外一個對象。TextStream對象揭示了操作文件內容的方法,比如寫、讀一行、跳過一行。VB常量vbcrlf產生一個換行符。在OpentextFile的命令參數中定義了TRUE,這就告訴了系統,如果文件不存在,就創建它。如果文件不存在,並且沒有定義TRUE參數,就會出錯。現在轉到目錄c:emp,打開test.txt,你可以看到如下的信息:
  User'sname
  User'shomepage
  User'semail
這些單詞可以被輸入在表單中的任何內容所替換。

6 fso -搜索功能

fsofso
建立搜索引擎的關鍵是遞歸。主要地,編寫一段代碼搜索目錄下的文件,然後對所有的目錄循環執行同樣的代碼。因為不能確定總共有多少個子目錄,所以必須一遍又一遍地執行搜索代碼,直到結束。遞歸調用非常好,下面來創建搜索頁面。假設已經建立了一個HTML表單,用戶在其中輸入一個搜索字元串。
  DimobjFolder
  DimstrSearchText
  DimobjFSO
  strSearchText=Request.Form("SearchText")"&objFile.Name&""
  bolFileFound=True
  EndIf
  objTextStream.Close
  Next
  'Here'stherecursionpart-foreach
  'subfolderinthisdirectory,runtheSearchfunctionagain
  ForEachobjSubFolderinobjFolder.SubFolders
  SearchobjSubFolder
  Next
  EndFunction

為了能打開文件,FSO需要實際的文件路徑,而不是web路徑。比如,是c:inetpubwwwrootempindex.html,而不是www.enfused.com/temp/index.html或者/temp/index.html。為了將後者轉換為前者,使用Server.MapPath("filename"),filename表示web路徑名。上面的代碼將在你指定的初始目錄下的文件夾的每一個子目錄中執行,在這裡,初始目錄是指web根目錄「/」。然後就簡單地打開目錄下的每一個文件,看看其中是否包含指定的字元串,如果找到字元串就顯示那個文件的鏈接。注意,隨著文件和子目錄數量的增加,搜索花費的時間也將增加。如果需要繁重的搜索工作,建議你採取其他的方法,比如微軟公司的索引伺服器Index Server。

7 fso -內容管理

fsofso
對文件改名。為了跟蹤所有的文檔,你將要重新命名它們以便唯一,這樣就可以被系統容易地區別。很不幸,FSO不允許簡單的文件改名操作,所以不得不修改一下。

<%
  'createthefsoobject
  setfso=Server.Createobject("Scripting.FileSystemObject")
  path="c:empest.txt"
  strDate=Replace(Date(),"/","")
  strDir="c:inetpubwwwrootarticles"&strDate
  strNewFileName=Hour(Now)&"_"&Minute(Now)&"_"&
  second(Now)&".html"
  'opentheoldfile
  setfile=fso.opentextfile(path,1)<--Forreading
  strText=file.readall
  setfile=nothing
  'checkforand/orcreatefolder
  ifnotfso.folderexists(Server.MapPath(strDir))then
  setf=fso.CreateFolder(Server.MapPath(strDir))
  else
  setf=fso.GetFolder(Server.MapPath(strDir))
  endif
  'createandwritenewfile
  setfile=fso.Createtextfile(f.path&""&strNewFileName)
  file.write(strText)
  setf=nothing
  file.close
  setfile=nothing
  'deletetheoldfile
  fso.DeleteFile(path&""&rst("FileName")&i)
  'cleanup
  setfso=nothing

fsofso

 

FSO能力的不足在這裡卻成了優勢,可以一次執行2步。首先,打開文件並讀入文件的內容。假設這裡要創建一個唯一的文件夾和一個唯一的文件來存儲文章。然而,因為文件夾的路徑每天都將改變,所以必須首先檢查是否文件夾已經存在,如果不存在,就創建它。這在ifnotfso.folderexists代碼段完成。然後,取得那個路徑,創建一個新的文件。新文件建立完成後,刪除掉舊文件,這通過fso.DeleteFile來完成。

這2步就是:對文件改名,然後移動到一個更合適的目錄下。注意,在這裡還可以對文件進行更多地操作,比如在寫入新文件前進行一下內容的編輯。

FSO確實存在一些弱點-比如,它很難處理二進位文件,這包括Word文檔、許多圖形格式的文件和其他一些文件。然而你仍然可以用其他的方式操作這些文件-移動它們、刪除它們,等等。你不能做的就是對它們進行打開或者寫操作。另外一個限制是對於文件長度的問題。當立刻讀寫一些內容時,所有的信息都存儲在內存中-內容越多,消耗的內存就越大。這將使每個工作都變得慢起來。所以,如果需要操作非常大的文件,或者大量的小文件時,考慮將文件分割成小塊,並且經常的清除內存。

將應用程序融入進COM對象組件,也能大大地提高程序的速度。同樣,你也不能使用FSO來管理許可權以及文件、文件夾的屬性,執行安全加密的一個很好方法就是將前面提到的留言簿文件設置為只讀,在需要時再設置為可寫,然後再修改回來。這個方法經常在CGI和Perl使用,但是很不幸,還沒有令人滿意的方法來用FSO實現。

8 fso -相關詞條

MYSQLIPICPALEXAPRSEO
CGIFSOFTPPOP3WCMECM
FLASHWEBGPUCPADIVCSS
HTMLBBS.NETXMLAJAXMD5

 

 

 

9 fso -參考資料

1、http://lzjx.com/w/main.asp?sx=fso
2、http://www.gonet8.com/Article/zw/web/200408/499.html
3、http://www.knowsky.com/tag-7.html
上一篇[內分泌]    下一篇 [《老王同學會》]

相關評論

同義詞:暫無同義詞