亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > ASP > 正文

深入理解ASP中FSO的神奇功能

2024-05-04 11:07:38
字體:
來源:轉載
供稿:網友
在ASP中,FSO的意思是File System Object,即文件系統對象。

  我們將要操縱的計算機文件系統,在這里是指位于web服務器之上。所以,確認你對此擁有合適的權限。理想情況下,你可以在自己的機器上建立一個web服務器,這樣就能方便地進行測試。如果運行于Windows平臺,請試一試微軟公司的免費個人Web服務器PWS。

  FSO 模型對象

   Drive Object:驅動器對象 供存取磁盤或者網絡驅動器
   FileSystemObject Object:文件系統對象 供存取計算機的文件系統
   Folder Object:文件夾對象 供存取文件夾的所有屬性
   TextStream Object:文本流對象 供存取文件內容

  你可以使用上面的對象做計算機上的任何事情,也包括破壞活動 ;-( 所以,請小心使用FSO。在web環境中,存儲信息是非常重要的,比如用戶信息,日志文件,等等。FSO提供了一個強大且簡單的方法高效率地保存數據。在這篇文章里面,著重討論FileSystemObject和TextStream對象。

  FSO由微軟公司提供支持,對于非Windows系統,大概不能再使用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")

  迄今為止,還沒有新鮮的東西,無非是獲取表單域的值并且賦值到變量。下面出現了有趣的部分 - 寫文件:

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站點建立一個搜索功能。

  建立搜索引擎的關鍵是遞歸。主要地,編寫一段代碼搜索目錄下的文件,然后對所有的目錄循環執行同樣的代碼。因為不能確定總共有多少個子目錄,所以必須一遍又一遍地執行搜索代碼,直到結束。遞歸調用非常好!

  下面來創建搜索頁面。假設已經建立了一個HTML表單,用戶在其中輸入一個搜索字符串。

Dim objFolder
Dim strSearchText
Dim objFSO

strSearchText = Request.Form("SearchText") < -- The search string
' create the FSO and Folder objects
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(Server.MapPath("/"))

Search objFolder

  上面的代碼簡單地初始化變量,Search函數執行搜索功能,描述如下:

Function Search(objFolder)

Dim objSubFolder

'loop through every file in the current
folder

For Each objFile in objFolder.Files
 Set objTextStream = objFSO.OpenTextFile(objFile.Path,1) < -- For Reading

  'read the file's contents into a
 variable

 strFileContents = objTextStream.ReadAll

  'if the search string is in the file, then
 write a link

 ' to the file

 If InStr(1, strFileContents, strSearchText, 1) then

  Response.Write "< A HREF=""/" & objFile.Name & _

   """>" & objFile.Name & "< /A>< BR>"
  bolFileFound = True
 End If
 objTextStream.Close
Next

'Here's the recursion part - for each
' subfolder in this directory, run the Search function again

For Each objSubFolder in objFolder.SubFolders
 Search objSubFolder
Next

End Function

 


 

  為了能打開文件,FSO需要實際的文件路徑,而不是web路徑。比如,是c:inetpubwwwroot empindex.html, 而不是www.enfused.com/temp/index.html 或者 /temp/index.html。 為了將后者轉換為前者,使用Server.MapPath("filename"), filename表示web路徑名。

  上面的代碼將在你指定的初始目錄下的文件夾的每一個子目錄中執行,在這里,初始目錄是指web根目錄“/”。然后就簡單地打開目錄下的每一個文件,看看其中是否包含指定的字符串,如果找到字符串就顯示那個文件的鏈接。

  注意,隨著文件和子目錄數量的增加,搜索花費的時間也將增加。如果需要繁重的搜索工作,建議你采取其他的方法,比如微軟公司的索引服務器Index Server。

  到此,你對FSO可能已經有了很好的體會。讓我們再深入研究一步,來解決更復雜的難題。

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

 

< %
' create the fso object
set fso = Server.Createobject("Scripting.FileSystemObject")
path = "c: emp est.txt"
strDate = Replace(Date(), "/", "")
strDir = "c:inetpubwwwrootarticles" & strDate
strNewFileName = Hour(Now) & "_" & Minute(Now) & "_" &
second(Now) & ".html"

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

' check for and/or create folder
if not fso.folderexists(Server.MapPath(strDir)) then
set f = fso.CreateFolder(Server.MapPath(strDir))
else
set f = fso.GetFolder(Server.MapPath(strDir))
end if

' create and write new file
set file = fso.Createtextfile(f.path & "" & strNewFileName)
file.write(strText)
set f = nothing
file.close
set file = nothing

' delete the old file
fso.DeleteFile(path & "" & rst("FileName") & i)
' clean up
set fso = nothing
%>

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

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

   FSO確實存在一些弱點 - 比如,它很難處理二進制文件,這包括Word文檔、許多圖形格式的文件和其他一些文件。然而你仍然可以用其他的方式操作這些文件 - 移動它們、刪除它們,等等。你不能做的就是對它們進行打開或者寫操作。

  另外一個限制是對于文件長度的問題。當立刻讀寫一些內容時,所有的信息都存儲在內存中 - 內容越多,消耗的內存就越大。這將使每個工作都變得慢起來。所以,如果需要操作非常大的文件,或者大量的小文件時,考慮將文件分割成小塊,并且經常的清除內存。將應用程序融入進COM對象組件,也能大大地提高程序的速度。

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

  還能用FSO做什么?

  在FSO中還有許多很棒的功能,但許多人沒有意識到。這些功能常常是在你感到做某些事情很難后才發現的,這時你經常要感嘆到:要是我早知道這個方法就好了!

  下面列舉一下這些不常用但是卻非??岬墓δ埽?br />
  很少被了解的FSO功能

  GetSpecialFolder Method 返回特定的Windows文件夾的路徑: Windows安裝目錄;Windows系統目錄;Windows臨時目錄 FSO.GetSpecialFolder([0, 1, or 2]) GetTempName Method 返回一個隨機產生的文件或者目錄名字,用于需要存儲臨時數據時GetAbsolutePathName Method 返回文件夾的絕對路徑(類似于Server.MapPath)。

  比如,FSO.GetAbsolutePathName("region") 將返回類似于下面的結果:"c:mydocsmyfolder egion"
GetExtensionName Method 返回路徑中最后部分的擴展名(比如:FSO.GetExtensionName("c:docs est.txt") 將返回txt) GetBaseName and GetParentFolder Methods 返回路徑中最后部分的父文件夾
(比如:FSO.GetParentFolder ("c:docsmydocs") 將返回'docs') Drives Property 返回所有本地可用驅動器的集合,用于建立資源瀏覽器樣的用戶接口。

  使用上面的功能時,最好建立好出錯處理的代碼。因為如果需要的參數不存在,將會產生麻煩的信息。

  總結

  如我們所見,FSO非常有用,這里介紹的僅僅是冰山一角。你可以使用FSO建立功能強大的應用程序,簡單地完成許多任務。

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
www高清在线视频日韩欧美| 成人黄色av免费在线观看| 一本一本久久a久久精品牛牛影视| 亚洲欧美中文在线视频| 国产69久久精品成人| 丝袜亚洲另类欧美重口| 亚洲成人久久网| 91国产视频在线| 久久99亚洲热视| 日韩精品一二三四区| 日韩国产中文字幕| 国产免费一区二区三区在线能观看| 久久久久久久久电影| 国产精品视频999| 欧美精品在线第一页| 奇米一区二区三区四区久久| 欧美午夜美女看片| 最近2019年手机中文字幕| 久久久久国产视频| 自拍偷拍亚洲欧美| 欧美大胆a视频| 国产日韩一区在线| 怡红院精品视频| 国产一区二区香蕉| 欧美视频在线观看 亚洲欧| 亚洲欧美色图片| 欧美巨猛xxxx猛交黑人97人| 中文字幕亚洲欧美日韩在线不卡| 亚洲欧洲偷拍精品| 成人伊人精品色xxxx视频| 精品国产福利在线| 高跟丝袜一区二区三区| 日本午夜精品理论片a级appf发布| 欧美二区乱c黑人| 热久久美女精品天天吊色| 日韩精品中文字幕有码专区| 欧美成aaa人片在线观看蜜臀| 国产成人综合一区二区三区| 久久精品91久久香蕉加勒比| 国产成人精品av| 国产精品免费在线免费| 高清视频欧美一级| 国产美女91呻吟求| 亚洲国产美女久久久久| 成人深夜直播免费观看| 国产婷婷成人久久av免费高清| 国产精品男女猛烈高潮激情| 国产日产欧美a一级在线| www.欧美精品一二三区| 久久久免费精品视频| 欧美性猛交xxxx乱大交3| 国产亚洲精品久久久久久777| 国产日韩精品一区二区| 国产福利成人在线| 日韩高清电影好看的电视剧电影| 国产精品女人久久久久久| 2019中文字幕在线| 日韩一二三在线视频播| 国内精品视频在线| 国产精品狼人色视频一区| 国产精品91一区| 国产精品成人一区二区| 欧美性极品xxxx娇小| 国产+成+人+亚洲欧洲| 最好看的2019年中文视频| 91av视频在线| 精品国产福利视频| 亚洲综合在线小说| 欧美激情2020午夜免费观看| 深夜成人在线观看| 丝袜亚洲欧美日韩综合| 亚洲激情在线视频| 成人夜晚看av| 国产成人精品免高潮在线观看| 亚洲精品www| 欧美大片在线看免费观看| 亚洲自拍欧美色图| 国产精品十八以下禁看| 色偷偷综合社区| 亚洲精品大尺度| 亚洲国产精品va在线看黑人| 亚洲一区国产精品| 4438全国亚洲精品在线观看视频| 欧美精品免费在线观看| 亚洲欧美三级伦理| 国产一区二区三区在线观看视频| 亚洲а∨天堂久久精品喷水| 日韩在线免费观看视频| 伊人av综合网| 国产一区二区三区四区福利| 久久九九有精品国产23| 日韩在线观看网址| 日本精品在线视频| 一本大道香蕉久在线播放29| 久久精品视频在线| 97国产suv精品一区二区62| 亚洲护士老师的毛茸茸最新章节| 成人免费看吃奶视频网站| xxx成人少妇69| 成人黄色免费片| 欧美影院久久久| 欧美国产日本高清在线| 麻豆精品精华液| 777午夜精品福利在线观看| 欧美俄罗斯性视频| 一区二区欧美激情| 国内精品400部情侣激情| 国产日韩在线播放| 国产女同一区二区| 亚洲激情免费观看| 久久精品男人天堂| 日韩欧美在线网址| 一区二区三区回区在观看免费视频| 2019亚洲日韩新视频| 亚洲一区二区自拍| 欧美激情一区二区三区在线视频观看| 欧美极品美女视频网站在线观看免费| 国产在线拍揄自揄视频不卡99| 国产亚洲成精品久久| 国产精品九九久久久久久久| www.午夜精品| 97久久精品在线| 97视频在线观看亚洲| 国产精品三级久久久久久电影| 国产精品久久久久福利| 欧美精品一区二区免费| 国产91|九色| 欧美一区二区三区四区在线| 日韩av手机在线观看| 亚洲人成亚洲人成在线观看| 疯狂做受xxxx高潮欧美日本| 情事1991在线| 狠狠躁夜夜躁人人爽超碰91| y97精品国产97久久久久久| 88国产精品欧美一区二区三区| 欧美日韩加勒比精品一区| 欧美专区日韩视频| 亚洲国产日韩欧美综合久久| 精品中文字幕在线2019| 国产精品高潮呻吟久久av野狼| 国内伊人久久久久久网站视频| 91久久久国产精品| 欧美日韩国产精品一区二区不卡中文| 欧美—级高清免费播放| 国产精品久久久久久久久免费| 免费av一区二区| 秋霞午夜一区二区| 国产日韩专区在线| 国产女人精品视频| 日韩国产高清污视频在线观看| 亚洲欧美在线磁力| 久久久久久12| 国产亚洲激情视频在线| 日韩av网站在线| 久久精品色欧美aⅴ一区二区| 亚洲精品视频在线播放| 国产z一区二区三区| 亚洲免费小视频| 亚洲天堂网站在线观看视频| 国产精品成熟老女人| 精品一区二区电影| 国产a∨精品一区二区三区不卡| 亚洲人成电影在线观看天堂色| 欧洲亚洲妇女av|