我的人生路  
          日歷
          <2005年7月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456
          統計
          • 隨筆 - 74
          • 文章 - 57
          • 評論 - 7
          • 引用 - 0

          導航

          常用鏈接

          留言簿(5)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          顏色

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

           
          在 ASP 程序中,我們需要對文件進行操作,常常會利用到 FSO 組件,而很多人對此不是很了解,所以想到開設這個專題,用來收集 FSO 相關的介紹資料。歡迎大家補充并進行討論。

          FileSystemObject 對象模型

          QUOTE
          FileSystemObject (FSO) 對象模型,允許對大量的屬性、方法和事件,使用較熟悉的 object.method 語法,來處理文件夾和文件。

          使用這個基于對象的工具和:

          HTML 來創建 Web 頁
          Windows Scripting Host 來為 Microsoft Windows 創建批文件
          Script Control 來對用其他語言開發的應用程序提供編輯腳本的能力
          因為在客戶端使用 FSO 而引起重要的安全性問題,提供潛在地不受歡迎的對客戶端本地文件系統的訪問,假定本文檔使用 FSO 對象模型,來創建由服務器端的 Internet Web 頁執行的腳本。因為使用了服務器端,Internet Explorer 默認安全設置不允許客戶端使用 FileSystemObject 對象。覆蓋那些默認值可能會引起在本地計算機上不受歡迎的對其文件系統的訪問,從而導致文件系統完整性的全部破壞,同時引起數據遺失或更糟的情況。

          FSO 對象模型使服務器端的應用程序能創建、改變、移動和刪除文件夾,或探測特定的文件夾是否存在,若存在,還可以找出有關文件夾的信息,如名稱、被創建或最后一次修改的日期,等等。

          FSO 對象模型還使文件處理變得很容易。在處理文件時,主要的目標是以易于訪問的格式把數據存儲在有效的空間和資源中。這就要求能夠創建文件,插入和改變數據,以及輸出(讀?。祿?。因為把數據存儲在數據庫中,如 Access 或 SQL 服務器,會給應用程序增加很大的開銷,所以把數據存儲在二進制或文本文件中可能是最有效的解決方案。可能不希望有該開銷,或者數據訪問要求可能不需要與功能完備的數據庫相關聯的所有額外功能。

          包含在 Scripting 類型庫 (Scrrun.dll) 中的 FSO 對象模型,支持通過 TextStream 對象來創建和操作文本文件。雖然還不支持二進制文件的創建或操作,但計劃將來要支持二進制文件。


          摘自 Windows 腳本手冊。

          相關資料:
          Windows 腳本手冊 下載


          --------------------
          純白色
          云娜音樂
          54ol.com 54ol.net h365.net 5icn.com 5itw.com 54zz.net uofan.com
          User is offlineProfile CardPM
          Go to the top of the page
          +Quote Post
          不學無術
          post Apr 3 2005, 05:43 AM
          發表于: #2


          論壇管理員
          *********

          用戶組: 管理員
          發表總數: 3,801
          注冊日期: 1-March 03
          來自: 天地人間
          會員編號: 24



          三種禁用 File System Object 組件的方法

          眾所周知,FileSystemObject組件的強大功能及破壞性是它屢屢被免費主頁提供商(那些支持ASP)的禁用的原因,我整理了一下,本來只找到兩種方法,后來被某人一刺激,硬是想到第三種不為人所知的方法,呵呵,也不知道是不是這樣的。

          第一種:用 RegSrv32 /u C:\WINDOWS\SYSTEM\scrrun.dll (win98路徑)來注銷該組件。此方法過于狠毒,屬于同歸于盡的方法,大家都沒得用,是下招。

          第二種:修改 Progid 的值,在 ASP 里調用組件的方式通常是 Set 對象名 = Server.CreateObject("Progid"),這時候我們就可以通過修改注冊表中的 Progid 值從達到禁用該組件的方法。在 開始-運行中敲入 regedit,然后找到 HKEY_CLASSES_ROOT\Scripting.FileSystemObject,這時候我們就可以更改該Progid的值了,如改成 Scripting.FileSystemObject8 。這樣在ASP頁里就這樣調用了:
          CODE

          <%@ Language=Vbscript%>
          <%
          Set Fs=Server.CreateObject("Scripting.FileSystemObject8")
          %>

          (如果你前面沒有調用過該組件的話,則無須重啟,就可以看到效果了,否則請重啟后看效果。)

          這時候我們看看還是用原來的調用方法的結果:
          CODE
          <%@ Language=Vbscript%>
          <%
          Set Fs=Server.CreateObject("Scripting.FileSystemObject")
          %>

          這時候的運行結果為:
          QUOTE
          服務器對象 錯誤 'ASP 0177 : 800401f3'

          Server.CreateObject 失敗

          /aspimage/testfile2.asp, 行3

          800401f3

          (OK,達到我們的要求)

          該方法由于本人遲了兩步,結果就讓別人搶著回答了,這樣極大的刺激了我,結果就產生了第三種方法。

          第三種:細心的高手們會想,既然能通過修改Progid值來禁用該組件,那 Clsid 是否也可以來修改呢?(OK,你想得和我一樣)我們知道,除了 CreateObject 方法以外,也可以使用一般的<object>標注建立一個組件,我們可以在ASP里面使用 HTM L的 <object> 標注,以便在網頁中加入一個組件。方法是:
          CODE
          <object runat=server id=fs1 scope=page progid="Scripting.FileSystemObj
          ect"></object>

          Runat 表示是在服務端執行,Scope 表示組件的生命周期,可以選用Session, Application 或 page (表示當前頁面,也可缺省)。

          這種寫法對我們沒用,還有一種寫法是:
          CODE
          <object runat=server id=fs1 scope=page classid="clsid:clsid的值"></object>

          我們也可以通過修改該Clsid的值而禁用該組件,如將注冊表中 HKEY_CLASSES_ROOT\Scripting.FileSystemObject\CLSID 的值 0D43FE01-F093-11CF-8940-00A0C9054228 改成 0D43FE01-F093-11CF-8940-00A0C9054229 (改了最后面一位),這時候的寫法為:
          CODE
          <object runat=server id=fs1 scope=page classid="clsid:0D43FE01-F093-11CF-8940-00A0C9054229"></object>

          看運行結果,沒問題,OK。這時候我們再用:
          CODE
          <object runat=server id=fs1 scope=page classid="clsid:0D43FE01-F093-11
          CF-8940-00A0C9054228"></object>

          這時候就出錯了。

          新建一用戶:iusr_domain
          IIS里設置對應站點的匿名用戶 IUSR_DOMAIN
          CACLS: 設置目錄權限

          這樣FSO可用,但不會影響別人。

          作者:未知
          來源:http://www.7880.com/Info/Article-a1be400.html


          --------------------
          純白色
          云娜音樂
          54ol.com 54ol.net h365.net 5icn.com 5itw.com 54zz.net uofan.com
          User is offlineProfile CardPM
          Go to the top of the page
          +Quote Post
          不學無術
          post Apr 3 2005, 06:08 AM
          發表于: #3


          論壇管理員
          *********

          用戶組: 管理員
          發表總數: 3,801
          注冊日期: 1-March 03
          來自: 天地人間
          會員編號: 24



          使用 FSO 把文本信息導入數據庫

          在開發WEB應用程序中,我們經常需要對文件系統中的驅動器、文件夾和文件進行處理,比如收集驅動器的相關信息;創建、添加、移動或刪除文件夾和文件等。在VB6中新提供了一套稱為FSO(File System Object)對象模型來對文件系統進行訪問處理。該模型提供了一個基于對象的工具,通過它所提供的一系列屬性和方法,我們可以在應用程序中更簡單、靈活地對文件系統進行各種操作。

          一、FSO簡介

            FSO 對象模型包含以下幾種對象:

            Drive 對象:允許收集系統物理或通過 LAN 與系統邏輯連接的硬盤、CD-ROM 等驅動器的可用空間、共享名等信息。

            Folder 對象:允許創建、刪除或移動文件夾,并向系統查詢文件夾的名稱、路徑等。

            Files 對象:允許創建、刪除或移動文件,并向系統查詢文件的名稱、路徑等。

            TextStream 對象:允許創建和讀寫文本文件。

            FileSystemObject 對象:提供一整套用于驅動器、文件夾和文件操作的方法,在功能上可以把它看作是上面幾個對象的集合并且經常與它們配合使用。與該對象相關聯的很多方法重復了前面四個對象中的方法,因此我們既可以通過 FileSystemObject 對象來對驅動器、文件夾和文件進行大多數操作,也可以通過對應的驅動器、文件夾或文件對象對這些組件進行操作。FSO 模型通過兩種方法實現對同一對象的操作,其操作效果是相同的,提供這種冗余功能的目的是為了實現最大的編程靈活性。

          在這篇文章中,我們將講解利用 FSO 對象模型的 TextStream 對象對文本文件的操作。

          (一) 用 FileSystemObject 來獲取文本文件對象

            1.創建一個 FileSystemObject 對象實例

          要進行文件操作,首先必須創建一個 FileSystemObject 對象實例,用來創建或打開一個文件.創建一個 FileSystemObject 對象實例的具體格式為(以AFileSystemObject)為例:
          CODE
          Set AFileSystemObject = CreateObject("Scripting.FileSystemObjecct")


            2.用 FileSystemObject 來獲取文本文件對象 TextStream

          FileSystemObject 提供了兩種方法用于獲取文本文件對象 TextStream,其中用于創建文件的是 CreateTextFile,用于打開已存在文件的是 OpenTextFile,兩種方法的返回結果都是一個 TextStream 對象的實例,利用該對象可以進行文件的具體操作。

          ⑴ 創建一個新文件

            創建新文件的方法的具體格式為(以AFileSystemObject為例):
            
          CODE
          AFilesystemObject.CreateTextFile(NewFileName, OverwriteExistingFile, IsUnicode)

          其中:
            NewFileName 是一個string值,指定要建立的文件的名稱,通常為文件的實際路徑加文件名稱,如 C:\webshare\aspsamp\filetest.txt 。

            OverwriteExistingFile 是一個Boolean值,表示如果有同名文件存在時是否覆蓋原來的文件。該參數可以省略,缺省時為 False,即不覆蓋原來文件。

            IsUnicode 是一個Boolean值,表示要建立的文件是ASCII文件還是Unicode文件,該參數可以省略,缺省時為 False,即為 ASCII 文件。

          ⑵ 打開已存在的文件

            打開已存在文件的方法的具體格式為(以AFileSystemObject為例):
            
          CODE
          AFilesystemObject.OpenTextFile(FileName, IOMode, create, format)

          其中:
            FileName 是一個string值,指定要打開的文件的名稱,通常為文件的實際路徑加文件名稱,C:\filepath\test.txt 。

            IOMode 是常數值,表示打開文件的目的,ForReading(1)表示用于讀取數據;ForAppending 表示用于增加數據.該參數可以省略,缺省時為 ForReading。

            Create 是一個Boolean值,表示要打開的文件不存在時是否創建新文件,
          該參數可以省略,缺省時為False,即不創建新文件。

            Format 表示文件打開的方式.其可能的值及含義如下:
          TristateTrue:以 Unicode 的方式打開.
          TristateFalse:以 ASCII 的方式打開.
          TristateUseDefault:以系統默認的方式打開.

          該參數可以省略,缺省時為 TristateFalse ,即ASCII方式。

          (二).用 TextStream 進行文件操作

            在建立或打開了文件之后,就可利用對象 TextStream 提供的方法進行文件的實際操作了。

           ?。保糜趯懖僮鞯姆椒ㄓ校?BR>
          ⑴ Write(string)
            將由 string 指定的字符串寫入到文件中。

          ⑵ WriteLine(string)
            在文件中寫入由 string 指定的字符串,并寫入一個換行字符。
            參數string 可以省略,此時將在文件中插入一個空行。

          ⑶ WriteBlankLines(NumOfLines)
            在文件中插入若干空行,行數由 NumOfLines 指定。

            2.用于讀操作的方法和屬性方法有:

          ⑴ AtEndOfLine
            該屬性是一個 Boolean 值,表示文件指針是否已指向當前行的行尾。

          ⑵ AtEndOfStream
            該屬性是一個 Boolean 值,表示文件指針是否已指向文件尾。

          ⑶ Column
            該屬性是一個整數值,表示文件指針在當前行中的位置。

          ⑷ Line
            該屬性是一個整數值,表示文件指針所在行的行號。

          ⑸ Read(NumOfCharacters)
            該方法從文件當前位置開始,讀入由NumOfCharacters數目指定的若干字符,返回一個字符串。

          ⑹ ReadLine
            該方法從文件當前位置開始,讀入當前行的內容直到行尾,返回一個字符串。

          ⑺ ReadAll
            該方法從當前位置開始,讀入整個文件的內容直到文件結束,返回一個字符串。

          ⑻ Skip(NumOfCharacters)
            該方法從文件當前位置開始,跳過由NumOfCharacters數目指定的若干字符。

          ⑼ SKipLine
            該方法從文件當前位置開始,跳過當前行的內容。

            3.用于關閉文件的方法有:

          ⑴ Close
            關閉已經建立或打開的文件。

          (三)、下面就以一個實例來說明如何使用FSO來讀取文本文件和如何保存到數據庫:

          1、 先創建一個讀取文件路徑的頁面:file.htm
          CODE

          <FORM METHOD=POST ACTION="upFile.asp" >
                 <div align="center"> <br>
                 <br>
                 <br>
                 <br>
                 <input type="file" name="path" size="40">
                 <INPUT TYPE="submit" name="dr" value="導入信息">
                 </div>
          </FORM>


          2、 編寫把獲取到的文本值保存到數據庫代碼:upFile.asp
          CODE
          <%@Language="VBScript"%>
          <%Response.Buffer=true%>
          <!--#include file="adovbs.inc"-->
          <%
          strConn = "DSN=DataSourceName"
          Set Conn = Server.CreateObject("ADODB.Connection")
          Conn.open strConn
          Set ObjComm = Server.CreateObject("ADODB.Command")
          ObjComm.CommandText = "sp_AddMsg"         ‘調用存儲過程
          ObjComm.CommandType = adCmdStoredProc
          Set ObjComm.ActiveConnection = Conn

          ''''''''''創建輸入輸出參數'''''''''''''''''
          Set ObjParamECom=ObjComm.CreateParameter("WC_ECompanyName",adVarchar,adParamInput,100)
               ObjComm.Parameters.Append ObjParamECom
               '@in_ECompanyName      Varchar(50),                   --公司英文名稱

          Set ObjParamAddr=ObjComm.CreateParameter("WC_Address",adVarchar,adParamInput,200)
               ObjComm.Parameters.Append ObjParamAddr
               '@in_Address      Varchar(50),                   --公司地址

          Set ObjParamCity=ObjComm.CreateParameter("WC_City",adVarchar,adParamInput,100)
               ObjComm.Parameters.Append ObjParamCity
               '@in_City     Varchar(50),                   --城市

          ''''''''''創建參數完畢''''''''''''''''''''
          %>
          <%
          Dim AllText, strLine1, strLine2, strLine3
          Dim strpath, fileurl

          fileurl = ""

          strpath=Trim(Request.form("path"))

          fileurl=strpath

          Set FSO = CreateObject("Scripting.FileSystemObject")

          Set ATextStream = FSO.OpenTextFile(fileurl, 1, false, TristateFalse)

          '''''''''提取數據''''''''''''''''''''''''''''
          Do While Not ATextStream.AtEndOfStream

          ''''''初始化變量''''''''''''''''
          strLine1 = ""
          strLine2 = ""
          strLine3 = ""

          '''''''''''''''''''''''''''''''
            ATextStream.SkipLine
            ATextStream.Skip(11)
            strLine1 = Trim(ATextStream.ReadLine)
            ATextStream.Skip(11)
            strLine2 = Trim(ATextStream.ReadLine)
            ATextStream.Skip(5)
            strLine3 = Trim(ATextStream.ReadLine)
            …
          'End if

          ''''''''''將變量加入參數集'''''''''''''
          ObjParamECom.Value = strLine1
          ObjParamCCom.Value = strLine2
          ObjParamAddr.Value = strLine3


          ''''''''''操作結束''''''''''''''''''''

          ObjComm.Execute() '運行命令

          Loop

          Response.Write("<br>" & "導入庫成功!<a href=dolist.html>[繼續導入]</a><br>")

          Set Conn = Nothing
          Set FSO = Nothing
          Set ATextStream = Nothing
          %>


          附:存儲過程sp_AddMsg代碼
          CODE
          CREATE PROCEDURE dbo.sp_AddMsg                 --導入國外企業信息
          (

            @in_CompanyName       Varchar(100),               --公司名稱
            @in_Address          Varchar(200),                 --公司地址
            @in_City           Varchar(100),              --公司所在城市
            …
          )
          AS
          SET NOCOUNT ON
                BEGIN TRAN
                     INSERT INTO Tb_WCLibrary(
                                      WC_CompanyName,
                                      WC_CCompanyName,
                                      WC_Address,
                                      …
                                         )
                        VALUES(
                                   @in_CompanyName,
                                   @in_CCompanyName,
                                   @in_Address,
                                   …
                                    )
          IF @@ERROR <> 0
          BEGIN
          ROLLBACK TRAN
          RETURN -1
          END

          COMMIT TRAN

          RETURN 0

          SET NOCOUNT OFF


          至此,全文內容講解結束,希望這篇文章能給讀者帶來一定的幫助。

          作者:未知
          來源:http://www.programfan.com/article/showarticle.asp?id=2328


          --------------------
          純白色
          云娜音樂
          54ol.com 54ol.net h365.net 5icn.com 5itw.com 54zz.net uofan.com
          User is offlineProfile CardPM
          Go to the top of the page
          +Quote Post
          不學無術
          post Apr 3 2005, 06:19 AM
          發表于: #4


          論壇管理員
          *********

          用戶組: 管理員
          發表總數: 3,801
          注冊日期: 1-March 03
          來自: 天地人間
          會員編號: 24



          ASP 中取得圖片寬度和高度的類(無組件)

          CODE
          <%
          Class ImgWHInfo '獲取圖片寬度和高度的類,支持JPG,GIF,PNG,BMP
             Dim ASO
             Private Sub Class_Initialize
                 Set ASO = Server.CreateObject("ADODB.Stream")
                 ASO.Mode = 3
                 ASO.Type = 1
                 ASO.Open
             End Sub
             Private Sub Class_Terminate
                 Err.Clear
                 Set ASO = Nothing
             End Sub

             Private Function Bin2Str(Bin)
                 Dim I, Str
                 For I=1 To LenB(Bin)
                     clow = MidB(Bin, I, 1)
                     If ASCB(clow) < 128 Then
                         Str = Str & Chr(ASCB(clow))
                     Else
                         I = I+1
                         If I <= LenB(Bin) Then Str = Str & Chr(ASCW(MidB(Bin, I, 1)&clow))
                     End If
                 Next
                 Bin2Str = Str
             End Function
               
             Private Function Num2Str(Num, Base, Lens)
                 Dim Ret
                 Ret = ""
                 While(Num >= Base)
                     Ret = (Num Mod Base) & Ret
                     Num = (Num - Num Mod Base) / Base
                 Wend
                 Num2Str = Right(String(Lens,"0") & Num & Ret,Lens)
             End Function
               
             Private Function Str2Num(Str, Base)
                 Dim Ret, I
                 Ret = 0
                 For I=1 To Len(Str)
                     Ret = Ret * base + Cint(Mid(Str, I, 1))
                 Next
                 Str2Num = Ret
             End Function
               
             Private Function BinVal(Bin)
                 Dim Ret, I
                 Ret = 0
                 For I = LenB(Bin) To 1 Step -1
                     Ret = Ret * 256 + AscB(MidB(Bin, I, 1))
                 Next
                 BinVal = Ret
             End Function
               
             Private Function BinVal2(Bin)
                 Dim Ret, I
                 Ret = 0
                 For I = 1 To LenB(Bin)
                     Ret = Ret * 256 + AscB(MidB(Bin, I, 1))
                 Next
                 BinVal2 = Ret
             End Function
               
             Private Function GetImageSize(filespec)
                 Dim bFlag
                 Dim Ret(3)
                 ASO.LoadFromFile(filespec)
                 bFlag = ASO.Read(3)
                 Select Case Hex(binVal(bFlag))
                 Case "4E5089":
                     ASO.Read(15)
                     ret(0) = "PNG"
                     ret(1) = BinVal2(ASO.Read(2))
                     ASO.Read(2)
                     ret(2) = BinVal2(ASO.Read(2))
                 Case "464947":
                     ASO.read(3)
                     ret(0) = "gif"
                     ret(1) = BinVal(ASO.Read(2))
                     ret(2) = BinVal(ASO.Read(2))
                 Case "535746":
                     ASO.read(5)
                     binData = ASO.Read(1)
                     sConv = Num2Str(ascb(binData), 2 , 8)
                     nBits = Str2Num(left(sConv, 5), 2)
                     sConv = mid(sConv, 6)
                     While(len(sConv) < nBits * 4)
                         binData = ASO.Read(1)
                         sConv = sConv&Num2Str(AscB(binData), 2 , 8)
                     Wend
                     ret(0) = "SWF"
                     ret(1) = Int(Abs(Str2Num(Mid(sConv, 1 * nBits+1, nBits), 2) - Str2Num(Mid(sConv, 0 * nBits + 1, nBits), 2)) / 20)
                     ret(2) = Int(Abs(Str2Num(Mid(sConv, 3 * nBits + 1, nBits), 2) - Str2Num(Mid(sConv, 2 * nBits + 1, nBits), 2)) / 20)
                 Case "FFD8FF":
                     Do  
                     Do : p1 = binVal(ASO.Read(1)) :  Loop While p1 = 255 And Not ASO.EOS
                     If p1 > 191 And p1 < 196 Then Exit Do Else ASO.read(binval2(ASO.Read(2)) - 2)
                     Do : p1 = binVal(ASO.Read(1)) : Loop While p1 < 255 And Not ASO.EOS
                     Loop While True
                     ASO.Read(3)
                     ret(0) = "JPG"
                     ret(2) = binval2(ASO.Read(2))
                     ret(1) = binval2(ASO.Read(2))
                 Case Else:
                     If left(Bin2Str(bFlag), 2) = "BM" Then
                         ASO.Read(15)
                         ret(0) = "BMP"
                         ret(1) = binval(ASO.Read(4))
                         ret(2) = binval(ASO.Read(4))
                     Else
                         ret(0) = ""
                     End If
                 End Select
                 ret(3) = "width = """ & ret(1) & """ height = """ & ret(2) & """"
                 getimagesize=ret
             End Function
               
             Public Function imgW(IMGPath)
                 Dim FSO,IMGFile,FileExt,Arr
                 Set FSO = Server.CreateObject("Scripting.FileSystemObject")
                 If (FSO.FileExists(IMGPath)) Then
                     Set IMGFile = FSO.GetFile(IMGPath)
                     FileExt = FSO.GetExtensionName(IMGPath)
                     Select Case FileExt
                         Case "gif", "bmp", "jpg", "png":
                         Arr = GetImageSize(IMGFile.Path)
                         imgW = Arr(1)
                     End Select
                     Set IMGFile = Nothing
                 Else
                     imgW = 0
                 End If    
                 Set FSO = Nothing
             End Function
             
             Public Function imgH(IMGPath)
                 Dim FSO, IMGFile, FileExt, Arr
                 Set FSO = server.CreateObject("Scripting.FileSystemObject")
                 If (FSO.FileExists(IMGPath)) Then
                     Set IMGFile = FSO.GetFile(IMGPath)
                     FileExt = FSO.GetExtensionName(IMGPath)
                     Select Case FileExt
                         Case "gif", "bmp", "jpg", "png":
                         Arr = getImageSize(IMGFile.Path)
                         imgH = Arr(2)
                     End Select
                     Set IMGFile = Nothing
                 Else
                     imgH = 0
                 End If    
                 Set FSO = Nothing
             End Function
          End Class

          IMGPath = "Test.jpg"

          Set PP = New ImgWHInfo  
          W = PP.imgW(Server.Mappath(IMGPath))  
          H = PP.imgH(Server.Mappath(IMGPath))
          Set pp = Nothing

          Response.Write("<img src='" & IMGPath & "' border=0><br>寬:" & W & ";高:" & H)
          %>


          作者:未知
          來源:http://www.programfan.com/article/showarticle.asp?id=2664


          --------------------
          純白色
          云娜音樂
          54ol.com 54ol.net h365.net 5icn.com 5itw.com 54zz.net uofan.com
          User is offlineProfile CardPM
          Go to the top of the page
          +Quote Post
          不學無術
          post Apr 3 2005, 06:29 AM
          發表于: #5


          論壇管理員
          *********

          用戶組: 管理員
          發表總數: 3,801
          注冊日期: 1-March 03
          來自: 天地人間
          會員編號: 24



          使用 FSO 進行搜索

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

             下面來創建搜索頁面。假設已經建立了一個HTML表單,用戶在其中輸入一個搜索字符串。
          CODE
          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函數執行搜索功能,描述如下:
          CODE
          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 is 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:\inetpub\wwwroot\empindex.htm,而不是 www.enfused.com/temp/index.html 或者 /temp/index.html。為了將后者轉換為前者,使用 Server.MapPath("filename"),filename 表示 web 路徑名。

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

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


          歡迎大家訪問我的個人網站 萌萌的IT人
          posted on 2005-07-01 16:34 一天一點愛戀 閱讀(388) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
           
          Copyright © 一天一點愛戀 Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 新建县| 明光市| 普定县| 昌吉市| 房产| 黎城县| 临颍县| 扎赉特旗| 沙坪坝区| 湘阴县| 荔波县| 积石山| 鄂尔多斯市| 神木县| 通州区| 二连浩特市| 竹山县| 岳阳市| 南丰县| 绥化市| 拜城县| 通道| 伊宁县| 安仁县| 鲁山县| 罗源县| 民乐县| 紫阳县| 竹山县| 济南市| 隆昌县| 安远县| 淳化县| 崇义县| 康定县| 孟连| 积石山| 朔州市| 白山市| 东明县| 龙州县|