<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的人生路  
    日歷
    <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 提供的方法進行文件的實際操作了。

      1.用于寫操作的方法有:

    ⑴ 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: 博客園 模板提供:滬江博客
    主站蜘蛛池模板: 亚洲AV日韩AV天堂久久| 一级毛片免费毛片毛片| 最近免费中文字幕高清大全| 在线A亚洲老鸭窝天堂| 青娱乐在线视频免费观看| 最近免费中文字幕4| 亚洲依依成人精品| 无码人妻AV免费一区二区三区| 亚洲中文字幕在线第六区| 一级做a爰性色毛片免费| 免费午夜爽爽爽WWW视频十八禁 | 亚洲另类小说图片| 三年片在线观看免费大全电影| 亚洲人成网7777777国产| 亚洲精品偷拍视频免费观看| 亚洲精品无码久久毛片| 日韩久久无码免费毛片软件| 国产男女猛烈无遮挡免费视频| 亚洲精品乱码久久久久久蜜桃图片| 国产精品久久久久久久久久免费 | 亚洲一区AV无码少妇电影☆| 特级毛片A级毛片100免费播放| 国产性生交xxxxx免费| 亚洲人成网站18禁止| 免费观看理论片毛片| 亚洲小说图区综合在线| 久久不见久久见中文字幕免费| jiz zz在亚洲| 精品国产麻豆免费网站| 亚洲a∨无码精品色午夜| 国产一区二区三区免费视频| 免费的黄网站男人的天堂| 国产黄色一级毛片亚洲黄片大全 | 性短视频在线观看免费不卡流畅| 亚洲国产精品网站久久| 无码免费午夜福利片在线| 亚洲性无码一区二区三区| 免费在线观看亚洲| 一级一看免费完整版毛片| 国产亚洲一区区二区在线| 在线观看特色大片免费网站|