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

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

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

    我的人生路  
    日歷
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567
    統(tǒng)計(jì)
    • 隨筆 - 74
    • 文章 - 57
    • 評(píng)論 - 7
    • 引用 - 0

    導(dǎo)航

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊(cè)

    顏色

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

     

     在ASP中,F(xiàn)SO的意思是File System Object,即文件系統(tǒng)對(duì)象。

       我們將要操縱的計(jì)算機(jī)文件系統(tǒng),在這里是指位于web服務(wù)器之上。所以,確認(rèn)你對(duì)此擁有合適的權(quán)限。理想情況下,你可以在自己的機(jī)器上建立一個(gè)web服務(wù)器,這樣就能方便地進(jìn)行測(cè)試。如果運(yùn)行于Windows平臺(tái),請(qǐng)?jiān)囈辉囄④浌镜拿赓M(fèi)個(gè)人Web服務(wù)器PWS。

       FSO 模型對(duì)象
    Drive Object:驅(qū)動(dòng)器對(duì)象 供存取磁盤或者網(wǎng)絡(luò)驅(qū)動(dòng)器
    FileSystemObject Object:文件系統(tǒng)對(duì)象 供存取計(jì)算機(jī)的文件系統(tǒng)
    Folder Object:文件夾對(duì)象 供存取文件夾的所有屬性
    TextStream Object:文本流對(duì)象 供存取文件內(nèi)容

       你可以使用上面的對(duì)象做計(jì)算機(jī)上的任何事情,也包括破壞活動(dòng) ;-( 所以,請(qǐng)小心使用FSO。在web環(huán)境中,存儲(chǔ)信息是非常重要的,比如用戶信息,日志文件,等等。FSO提供了一個(gè)強(qiáng)大且簡(jiǎn)單的方法高效率地保存數(shù)據(jù)。在這篇文章里面,著重討論FileSystemObject和TextStream對(duì)象。

       FSO由微軟公司提供支持,對(duì)于非Windows系統(tǒng),大概不能再使用ASP。

       怎么樣使用FSO?

       為了使用FSO來執(zhí)行所有的工作,首先要?jiǎng)?chuàng)建對(duì)象,代碼就象下面這樣:

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

       這樣就建立了FSO并且賦予變量fso,接著就可以使用熟悉的object.method語法來執(zhí)行文件系統(tǒng)的操作〔查看Visual Basic文檔,獲取更多的關(guān)于對(duì)象和對(duì)象向?qū)Ь幊痰闹R(shí)〕。在這里,我們可以使用fso.method 或者 fso.property,這些將在下面的例子中看到。

       FSO模型位于由微軟提供的腳本運(yùn)行時(shí)間DLL文件中,它是scrrun.dll。你可以在任何應(yīng)用程序中引用這個(gè)DLL文件,比如MS Access,Word。 就是說,并非僅僅限制在ASP中應(yīng)用它。

       這里有一個(gè)簡(jiǎn)要的FSO方法列表:

       FSO方法
    CopyFile 拷貝一個(gè)或者多個(gè)文件到新路徑
    CreateTextFile 創(chuàng)建文件并且返回一個(gè)TextStream對(duì)象
    DeleteFile 刪除一個(gè)文件
    OpenTextFile 打開文件并且返回TextStream對(duì)象,以便讀取或者追加

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

       假設(shè)你想創(chuàng)建一個(gè)簡(jiǎn)單的留言簿,你可以建立一個(gè)數(shù)據(jù)庫,在其中存儲(chǔ)用戶的信息。然而,如果并不需要數(shù)據(jù)庫的強(qiáng)大功能,使用FSO來存儲(chǔ)信息將節(jié)省你的時(shí)間和金錢。并且,一些ISP也許限制了web上的數(shù)據(jù)庫應(yīng)用。

       假設(shè)你在一個(gè)表單中收集了一些用戶信息,這里是一個(gè)簡(jiǎn)單表單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")

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

    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方法返回一個(gè)TextStream對(duì)象,它是FSO模型中的另外一個(gè)對(duì)象。TextStream對(duì)象揭示了操作文件內(nèi)容的方法,比如寫、讀一行、跳過一行。VB常量vbcrlf產(chǎn)生一個(gè)換行符。

       在OpentextFile的命令參數(shù)中定義了TRUE,這就告訴了系統(tǒng),如果文件不存在,就創(chuàng)建它。如果文件不存在,并且沒有定義TRUE參數(shù),就會(huì)出錯(cuò)。

       現(xiàn)在轉(zhuǎn)到目錄c: emp,打開test.txt,你可以看到如下的信息:

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

       當(dāng)然,這些單詞可以被輸入在表單中的任何內(nèi)容所替換。

       現(xiàn)在已經(jīng)有了一些用戶信息保存在文件中,就像一個(gè)簡(jiǎn)單的數(shù)據(jù)庫。假設(shè)有一個(gè)用戶想了解所有的訪問者,就要從登
    記的信息中分離出相關(guān)部分,因?yàn)闆]有象數(shù)據(jù)庫一樣擁有結(jié)構(gòu)化的列。

       我們知道,在所創(chuàng)建的文件中,第1行是用戶名,第2行是他們的主頁,第3行是他們的電子郵件地址。隨后登記的用
    戶也是按照這樣的結(jié)構(gòu)存儲(chǔ)他們的信息,所以每3行將包含一個(gè)用戶的登記信息。知道了這些,就可以編寫下面的代碼來顯
    示信息:

    < %
    ' 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

       接著,分析每一行,并且格式化數(shù)據(jù):

    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
    %>

       這里僅僅做了一個(gè)非常簡(jiǎn)單的輸出,但是你可以根據(jù)情況包含表格或者DHTML表單信息。

       如果已經(jīng)正確地建立并寫入了文件,上面的小小循環(huán)將合適地列出數(shù)據(jù)庫中的每一個(gè)人的信息。ReadLine方法讀取1
    行內(nèi)容,直到遇到換行符,隨后的ReadLine調(diào)用將讀取下一行。AtEndOfStream是TextStream對(duì)象的屬性,它告訴我們何時(shí)
    遇到文件的尾部。

       假設(shè)由于某種原因,我們沒有正確地形成文件,如果一個(gè)用戶只有2行信息而不是3行,那么就會(huì)產(chǎn)生一些錯(cuò)誤。我們
    這里的循環(huán)取回文件中的下3行信息,如果沒有3行多的信息,就將出現(xiàn)如下的錯(cuò)誤信息:

       Server object error 'ASP 0177 : 800a003e'

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

       上面討論了基本知識(shí),然后說說權(quán)限許可的問題。FSO以創(chuàng)建它的用戶帳戶權(quán)限運(yùn)行,換言之,如果有人從Internet
    上訪問你的頁面,那么這個(gè)internet帳戶就創(chuàng)建FSO。如果以administrator的身份登錄計(jì)算機(jī),并且登錄頁面,那么
    administrator帳戶就創(chuàng)建了FSO。這是非常重要的,因?yàn)橐欢ǖ膸魮碛幸欢ǖ臋?quán)限,并且FSO需要一些權(quán)限從而能完整的
    執(zhí)行功能。

       internet帳戶(IUSER_MachineName,MachineName是服務(wù)器的名字)一般只擁有讀權(quán)限,這意味著用戶將不能寫入留
    言簿文件。然而,有幾個(gè)選擇可以繞過這個(gè)問題。

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

       第2個(gè)方法是創(chuàng)建一個(gè)目錄或者文件,IUSER_MachineName用戶對(duì)此有寫權(quán)限。這樣做可能開放了一些潛在的安全漏
    洞,因?yàn)槿魏沃勒_目錄并具備一定web技巧的人就能在服務(wù)器上填充內(nèi)容。這是一個(gè)很嚴(yán)重的禁忌。所以你必須確認(rèn)在
    隱藏的場(chǎng)所保存了這些可寫目錄的信息,并且盡可能地將這些目錄設(shè)置在web目錄結(jié)構(gòu)以外(比如在Windows下,這是一個(gè)
    不在inetpub目錄下的一個(gè)目錄)。

       你也許想:好,現(xiàn)在我知道如何寫入文件了。但能做到更多一些嗎?下面來試一試為web站點(diǎn)建立一個(gè)搜索功能。

       建立搜索引擎的關(guān)鍵是遞歸。主要地,編寫一段代碼搜索目錄下的文件,然后對(duì)所有的目錄循環(huán)執(zhí)行同樣的代碼。因
    為不能確定總共有多少個(gè)子目錄,所以必須一遍又一遍地執(zhí)行搜索代碼,直到結(jié)束。遞歸調(diào)用非常好!

       下面來創(chuàng)建搜索頁面。假設(shè)已經(jīng)建立了一個(gè)HTML表單,用戶在其中輸入一個(gè)搜索字符串。

    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

       上面的代碼簡(jiǎn)單地初始化變量,Search函數(shù)執(zhí)行搜索功能,描述如下:

     

    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

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

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

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

       到此,你對(duì)FSO可能已經(jīng)有了很好的體會(huì)。讓我們?cè)偕钊胙芯恳徊剑瑏斫鉀Q更復(fù)雜的難題。

       首先,你可能希望對(duì)文件改名。為了跟蹤所有的文檔,你將要重新命名它們以便唯一,這樣就可以被系統(tǒng)容易地區(qū)
    別。很不幸,F(xiàn)SO不允許簡(jiǎn)單的文件改名操作,所以我們不得不修改一下。

    < %
    ' 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能力的不足在這里卻成了優(yōu)勢(shì),我們可以一次執(zhí)行2步。首先,打開文件并讀入文件的內(nèi)容。假設(shè)這里要?jiǎng)?chuàng)建一個(gè)
    唯一的文件夾和一個(gè)唯一的文件來存儲(chǔ)文章。然而,因?yàn)槲募A的路徑每天都將改變,所以必須首先檢查是否文件夾已經(jīng)
    存在,如果不存在,就創(chuàng)建它。這在if not fso.folderexists代碼段完成。然后,取得那個(gè)路徑,創(chuàng)建一個(gè)新的文件。新
    文件建立完成后,刪除掉舊文件,這通過fso.DeleteFile來完成。

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

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

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

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

       還能用FSO做什么?

       在FSO中還有許多很棒的功能,但許多人沒有意識(shí)到。這些功能常常是在你感到做某些事情很難后才發(fā)現(xiàn)的,這時(shí)你經(jīng)常要感嘆到:要是我早知道這個(gè)方法就好了!

       下面列舉一下這些不常用但是卻非常酷的功能:

       很少被了解的FSO功能
    GetSpecialFolder Method 返回特定的Windows文件夾的路徑: Windows安裝目錄;Windows系統(tǒng)目錄;Windows臨時(shí)目錄 FSO.GetSpecialFolder([0, 1, or 2])
    GetTempName Method 返回一個(gè)隨機(jī)產(chǎn)生的文件或者目錄名字,用于需要存儲(chǔ)臨時(shí)數(shù)據(jù)時(shí)
    GetAbsolutePathName Method 返回文件夾的絕對(duì)路徑(類似于Server.MapPath)。
    比如,F(xiàn)SO.GetAbsolutePathName("region") 將返回類似于下面的結(jié)果:"c:mydocsmyfolder egion"
    GetExtensionName Method 返回路徑中最后部分的擴(kuò)展名
    (比如:FSO.GetExtensionName("c:docs est.txt") 將返回txt)
    GetBaseName and GetParentFolder Methods 返回路徑中最后部分的父文件夾
    (比如:FSO.GetParentFolder ("c:docsmydocs") 將返回'docs')
    Drives Property 返回所有本地可用驅(qū)動(dòng)器的集合,用于建立資源瀏覽器樣的用戶接口。

       使用上面的功能時(shí),最好建立好出錯(cuò)處理的代碼。因?yàn)槿绻枰膮?shù)不存在,將會(huì)產(chǎn)生麻煩的信息。

       總結(jié)

       如我們所見,F(xiàn)SO非常有用,這里介紹的僅僅是冰山一角。你可以使用FSO建立功能強(qiáng)大的應(yīng)用程序,簡(jiǎn)單地完成許多任務(wù)。

    posted @ 2005-07-06 10:28 一天一點(diǎn)愛戀 閱讀(126) | 評(píng)論 (0)編輯 收藏
     
    在 ASP 程序中,我們需要對(duì)文件進(jìn)行操作,常常會(huì)利用到 FSO 組件,而很多人對(duì)此不是很了解,所以想到開設(shè)這個(gè)專題,用來收集 FSO 相關(guān)的介紹資料。歡迎大家補(bǔ)充并進(jìn)行討論。

    FileSystemObject 對(duì)象模型

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

    使用這個(gè)基于對(duì)象的工具和:

    HTML 來創(chuàng)建 Web 頁
    Windows Scripting Host 來為 Microsoft Windows 創(chuàng)建批文件
    Script Control 來對(duì)用其他語言開發(fā)的應(yīng)用程序提供編輯腳本的能力
    因?yàn)樵诳蛻舳耸褂?FSO 而引起重要的安全性問題,提供潛在地不受歡迎的對(duì)客戶端本地文件系統(tǒng)的訪問,假定本文檔使用 FSO 對(duì)象模型,來創(chuàng)建由服務(wù)器端的 Internet Web 頁執(zhí)行的腳本。因?yàn)槭褂昧朔?wù)器端,Internet Explorer 默認(rèn)安全設(shè)置不允許客戶端使用 FileSystemObject 對(duì)象。覆蓋那些默認(rèn)值可能會(huì)引起在本地計(jì)算機(jī)上不受歡迎的對(duì)其文件系統(tǒng)的訪問,從而導(dǎo)致文件系統(tǒng)完整性的全部破壞,同時(shí)引起數(shù)據(jù)遺失或更糟的情況。

    FSO 對(duì)象模型使服務(wù)器端的應(yīng)用程序能創(chuàng)建、改變、移動(dòng)和刪除文件夾,或探測(cè)特定的文件夾是否存在,若存在,還可以找出有關(guān)文件夾的信息,如名稱、被創(chuàng)建或最后一次修改的日期,等等。

    FSO 對(duì)象模型還使文件處理變得很容易。在處理文件時(shí),主要的目標(biāo)是以易于訪問的格式把數(shù)據(jù)存儲(chǔ)在有效的空間和資源中。這就要求能夠創(chuàng)建文件,插入和改變數(shù)據(jù),以及輸出(讀取)數(shù)據(jù)。因?yàn)榘褦?shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中,如 Access 或 SQL 服務(wù)器,會(huì)給應(yīng)用程序增加很大的開銷,所以把數(shù)據(jù)存儲(chǔ)在二進(jìn)制或文本文件中可能是最有效的解決方案。可能不希望有該開銷,或者數(shù)據(jù)訪問要求可能不需要與功能完備的數(shù)據(jù)庫相關(guān)聯(lián)的所有額外功能。

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


    摘自 Windows 腳本手冊(cè)。

    相關(guān)資料:
    Windows 腳本手冊(cè) 下載


    --------------------
    純白色
    云娜音樂
    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
    不學(xué)無術(shù)
    post Apr 3 2005, 05:43 AM
    發(fā)表于: #2


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

    用戶組: 管理員
    發(fā)表總數(shù): 3,801
    注冊(cè)日期: 1-March 03
    來自: 天地人間
    會(huì)員編號(hào): 24



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

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

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

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

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

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

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

    這時(shí)候的運(yùn)行結(jié)果為:
    QUOTE
    服務(wù)器對(duì)象 錯(cuò)誤 'ASP 0177 : 800401f3'

    Server.CreateObject 失敗

    /aspimage/testfile2.asp, 行3

    800401f3

    (OK,達(dá)到我們的要求)

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

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

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

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

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

    看運(yùn)行結(jié)果,沒問題,OK。這時(shí)候我們?cè)儆茫?BR>
    CODE
    <object runat=server id=fs1 scope=page classid="clsid:0D43FE01-F093-11
    CF-8940-00A0C9054228"></object>

    這時(shí)候就出錯(cuò)了。

    新建一用戶:iusr_domain
    IIS里設(shè)置對(duì)應(yīng)站點(diǎn)的匿名用戶 IUSR_DOMAIN
    CACLS: 設(shè)置目錄權(quán)限

    這樣FSO可用,但不會(huì)影響別人。

    作者:未知
    來源: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
    不學(xué)無術(shù)
    post Apr 3 2005, 06:08 AM
    發(fā)表于: #3


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

    用戶組: 管理員
    發(fā)表總數(shù): 3,801
    注冊(cè)日期: 1-March 03
    來自: 天地人間
    會(huì)員編號(hào): 24



    使用 FSO 把文本信息導(dǎo)入數(shù)據(jù)庫

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

    一、FSO簡(jiǎn)介

      FSO 對(duì)象模型包含以下幾種對(duì)象:

      Drive 對(duì)象:允許收集系統(tǒng)物理或通過 LAN 與系統(tǒng)邏輯連接的硬盤、CD-ROM 等驅(qū)動(dòng)器的可用空間、共享名等信息。

      Folder 對(duì)象:允許創(chuàng)建、刪除或移動(dòng)文件夾,并向系統(tǒng)查詢文件夾的名稱、路徑等。

      Files 對(duì)象:允許創(chuàng)建、刪除或移動(dòng)文件,并向系統(tǒng)查詢文件的名稱、路徑等。

      TextStream 對(duì)象:允許創(chuàng)建和讀寫文本文件。

      FileSystemObject 對(duì)象:提供一整套用于驅(qū)動(dòng)器、文件夾和文件操作的方法,在功能上可以把它看作是上面幾個(gè)對(duì)象的集合并且經(jīng)常與它們配合使用。與該對(duì)象相關(guān)聯(lián)的很多方法重復(fù)了前面四個(gè)對(duì)象中的方法,因此我們既可以通過 FileSystemObject 對(duì)象來對(duì)驅(qū)動(dòng)器、文件夾和文件進(jìn)行大多數(shù)操作,也可以通過對(duì)應(yīng)的驅(qū)動(dòng)器、文件夾或文件對(duì)象對(duì)這些組件進(jìn)行操作。FSO 模型通過兩種方法實(shí)現(xiàn)對(duì)同一對(duì)象的操作,其操作效果是相同的,提供這種冗余功能的目的是為了實(shí)現(xiàn)最大的編程靈活性。

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

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

      1.創(chuàng)建一個(gè) FileSystemObject 對(duì)象實(shí)例

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


      2.用 FileSystemObject 來獲取文本文件對(duì)象 TextStream

    FileSystemObject 提供了兩種方法用于獲取文本文件對(duì)象 TextStream,其中用于創(chuàng)建文件的是 CreateTextFile,用于打開已存在文件的是 OpenTextFile,兩種方法的返回結(jié)果都是一個(gè) TextStream 對(duì)象的實(shí)例,利用該對(duì)象可以進(jìn)行文件的具體操作。

    ⑴ 創(chuàng)建一個(gè)新文件

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

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

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

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

    ⑵ 打開已存在的文件

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

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

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

      Create 是一個(gè)Boolean值,表示要打開的文件不存在時(shí)是否創(chuàng)建新文件,
    該參數(shù)可以省略,缺省時(shí)為False,即不創(chuàng)建新文件。

      Format 表示文件打開的方式.其可能的值及含義如下:
    TristateTrue:以 Unicode 的方式打開.
    TristateFalse:以 ASCII 的方式打開.
    TristateUseDefault:以系統(tǒng)默認(rèn)的方式打開.

    該參數(shù)可以省略,缺省時(shí)為 TristateFalse ,即ASCII方式。

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

      在建立或打開了文件之后,就可利用對(duì)象 TextStream 提供的方法進(jìn)行文件的實(shí)際操作了。

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

    ⑴ Write(string)
      將由 string 指定的字符串寫入到文件中。

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

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

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

    ⑴ AtEndOfLine
      該屬性是一個(gè) Boolean 值,表示文件指針是否已指向當(dāng)前行的行尾。

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

    ⑶ Column
      該屬性是一個(gè)整數(shù)值,表示文件指針在當(dāng)前行中的位置。

    ⑷ Line
      該屬性是一個(gè)整數(shù)值,表示文件指針?biāo)谛械男刑?hào)。

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

    ⑹ ReadLine
      該方法從文件當(dāng)前位置開始,讀入當(dāng)前行的內(nèi)容直到行尾,返回一個(gè)字符串。

    ⑺ ReadAll
      該方法從當(dāng)前位置開始,讀入整個(gè)文件的內(nèi)容直到文件結(jié)束,返回一個(gè)字符串。

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

    ⑼ SKipLine
      該方法從文件當(dāng)前位置開始,跳過當(dāng)前行的內(nèi)容。

      3.用于關(guān)閉文件的方法有:

    ⑴ Close
      關(guān)閉已經(jīng)建立或打開的文件。

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

    1、 先創(chuàng)建一個(gè)讀取文件路徑的頁面: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="導(dǎo)入信息">
           </div>
    </FORM>


    2、 編寫把獲取到的文本值保存到數(shù)據(jù)庫代碼: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"         ‘調(diào)用存儲(chǔ)過程
    ObjComm.CommandType = adCmdStoredProc
    Set ObjComm.ActiveConnection = Conn

    ''''''''''創(chuàng)建輸入輸出參數(shù)'''''''''''''''''
    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),                   --城市

    ''''''''''創(chuàng)建參數(shù)完畢''''''''''''''''''''
    %>
    <%
    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)

    '''''''''提取數(shù)據(jù)''''''''''''''''''''''''''''
    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

    ''''''''''將變量加入?yún)?shù)集'''''''''''''
    ObjParamECom.Value = strLine1
    ObjParamCCom.Value = strLine2
    ObjParamAddr.Value = strLine3


    ''''''''''操作結(jié)束''''''''''''''''''''

    ObjComm.Execute() '運(yùn)行命令

    Loop

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

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


    附:存儲(chǔ)過程sp_AddMsg代碼
    CODE
    CREATE PROCEDURE dbo.sp_AddMsg                 --導(dǎo)入國(guó)外企業(yè)信息
    (

      @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


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

    作者:未知
    來源: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
    不學(xué)無術(shù)
    post Apr 3 2005, 06:19 AM
    發(fā)表于: #4


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

    用戶組: 管理員
    發(fā)表總數(shù): 3,801
    注冊(cè)日期: 1-March 03
    來自: 天地人間
    會(huì)員編號(hào): 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
    不學(xué)無術(shù)
    post Apr 3 2005, 06:29 AM
    發(fā)表于: #5


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

    用戶組: 管理員
    發(fā)表總數(shù): 3,801
    注冊(cè)日期: 1-March 03
    來自: 天地人間
    會(huì)員編號(hào): 24



    使用 FSO 進(jìn)行搜索

       建立搜索引擎的關(guān)鍵是遞歸。主要地,編寫一段代碼搜索目錄下的文件,然后對(duì)所有的目錄循環(huán)執(zhí)行同樣的代碼。因?yàn)椴荒艽_定總共有多少個(gè)子目錄,所以必須一遍又一遍地執(zhí)行搜索代碼,直到結(jié)束。遞歸調(diào)用非常好!

       下面來創(chuàng)建搜索頁面。假設(shè)已經(jīng)建立了一個(gè)HTML表單,用戶在其中輸入一個(gè)搜索字符串。
    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


       上面的代碼簡(jiǎn)單地初始化變量,Search函數(shù)執(zhí)行搜索功能,描述如下:
    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


       為了能打開文件,F(xiàn)SO需要實(shí)際的文件路徑,而不是web路徑。比如,是c:\inetpub\wwwroot\empindex.htm,而不是 www.enfused.com/temp/index.html 或者 /temp/index.html。為了將后者轉(zhuǎn)換為前者,使用 Server.MapPath("filename"),filename 表示 web 路徑名。

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

       注意,隨著文件和子目錄數(shù)量的增加,搜索花費(fèi)的時(shí)間也將增加。如果需要繁重的搜索工作,建議你采取其他的方法,比如微軟公司的索引服務(wù)器 Index Server。
    posted @ 2005-07-01 16:34 一天一點(diǎn)愛戀 閱讀(387) | 評(píng)論 (0)編輯 收藏
     

    使用W3 JMail實(shí)現(xiàn)郵件發(fā)送的解決方案

    W3 JMail 郵件組件是Dimac公司開發(fā)的用來完成郵件的發(fā)送、接收、加密和集群傳輸?shù)裙ぷ鞯摹3 Jmail組件是國(guó)際最為流行的郵件組件之一,當(dāng)今世界上絕大部分ASP程序員都在使用w3 Jmail組件構(gòu)建郵件發(fā)送系統(tǒng),那是因?yàn)閣3 Jmail組件使用了新的內(nèi)核技術(shù),使其更加可靠和穩(wěn)定。

    一、下面向讀者介紹w3 Jmail4.3組件的新特性:

    1、 w3 Jmail4.3組件重新設(shè)計(jì)了其內(nèi)部結(jié)構(gòu)——使用Message對(duì)象代替原來的單一對(duì)象Jmail.smtpmail發(fā)送郵件;

    2、 w3 Jmail4.3組件一共有十多個(gè)對(duì)象(后面將詳細(xì)介紹)——這些對(duì)象中,絕大多數(shù)是針對(duì)Jmail.Message對(duì)象操作的;

    3、 支持從POP3郵件服務(wù)器收取郵件;

    4、 支持加密郵件的傳輸;

    5、 快速發(fā)送,一次會(huì)話就完成郵件發(fā)送;

    6、 還有一個(gè)特性就是可以使用w3 Jmail4.3組件的集群發(fā)送功能一次發(fā)送成千上萬個(gè)郵件,還可以通過郵件合并(mailmerge)對(duì)象來個(gè)性化郵件。

    二、Jmail郵件組件的安裝及卸載:

    1、 安裝

    跟使用別個(gè)組件一樣,在使用Jmail郵件組件之前要先安裝或注冊(cè)該組件Jmail.dll。具體注冊(cè)方法,是先把Jmail.dll文件拷貝到硬盤的某一目錄下(如C:\Jmail\Jmail.dll),然后執(zhí)行命令Regsvr32 C:\Jmail\Jmail.dll即可。

    2、 卸載

    卸載組件是安裝組件的相反動(dòng)作,可以使用參數(shù)/U來卸載已安裝的組件,執(zhí)行命令Regsvr32 /U Jmail.dll即可。

    三、詳細(xì)介紹W3 Jmail組件的對(duì)象(12個(gè)):

    1、.POP3對(duì)象

    屬性(或方法)
    說明

    Connect(Username,Password,Server,Port)
    連接POP3服務(wù)器,斷口可選,默認(rèn)110。

    DeleteMessages()
    從郵件服務(wù)器上刪除所有郵件。

    DeleteSingleMessage(MessageID)
    從郵件服務(wù)器上刪除由MessageID指定的郵件。

    Disconnect()
    關(guān)閉跟郵件服務(wù)器的連接。

    DownloadHeaders()
    從郵件服務(wù)器上讀取所有的郵件頭并傳遞給Messages集合。

    DownloadMessages()
    從郵件服務(wù)器讀取所有郵件。

    DownloadSingleHeader(MessageID)
    從郵件服務(wù)器讀取指定的郵件頭并傳遞給Messages集合。

    DownloadUnreadMessages()
    從郵件服務(wù)器上讀取所有未讀郵件。




    2、.Messages對(duì)象

    屬性(或方法)
    說明

    Clear()
    清除集合中的所有內(nèi)容,并不會(huì)刪除郵件服務(wù)器上的任何郵件。

    Count():Integer
    返回集合中記錄的數(shù)目:I=Messages.Count

    Item(Index):Pointer
    返回一個(gè)Message對(duì)象。Set oMsg=Messages.Item(0)




    3、.Message對(duì)象

    屬性(或方法)
    說明

    AddAttachment(FileName,isInline,ContentType):String
    給郵件添加一個(gè)文件型的附件。isInline設(shè)置為True時(shí),添加的這個(gè)附件就是一個(gè)可嵌入的附件。

    AddCustomAttachment(FileName,Data,isInline):String
    給郵件添加一個(gè)自定義類型的附件。

    AddHeader(Xheader,Value)
    給郵件添加一個(gè)自定義郵件頭X-Header。

    AddNativeHeader(Header,Value)
    給郵件添加一個(gè)郵件頭。

    AddRecipient(emailAddress,recipientName,PGPKey)
    給郵件添加一個(gè)收件人。RecipientName和PGPKey是可選項(xiàng),RecipientName為收件人姓名,PGPKey給郵件加密。

    AddRecipientBCC(emailAddress,PGPKey)
    添加一個(gè)郵件暗送人(BCC)地址。

    AddRecipientCC(emailAddress,recipientName,PGPKey)
    給郵件添加一個(gè)郵件抄送人(CC)地址。

    AddURLAttachment(bstrURL,bstrAttachAs,isInline,bstrAuth):String
    從指定的URL下載文件并添加為郵件附件。參數(shù)bstrAttachAs是用來更改添加為郵件附件的文件名。

    AppendBodyFromFile(FileName)
    清除郵件正文,并把指定文件的內(nèi)容作為郵件正文。

    AppendHTML(Text)
    從郵件追加HTML格式正文,如例所示:Message. AppendHTML(“<H3>Hello Word</H3>”)

    AppendText(Text)
    向郵件添加文本正文。

    Clear()
    清除所有郵件消息,是成為一個(gè)空對(duì)象。

    ClearAttachments()
    清除附件列表。如:Message.ClearAttachments

    ClearCustomHeaders()
    清除所有自定義的郵件頭。

    ClearRecipients()
    清除所有收件人地址列表。

    Close()
    釋放Jmail與郵件服務(wù)器連接而使用的緩存(Cache)。

    DecodeHeader(Header):String
    輸出一個(gè)郵件頭消息。

    ExtractEmailAddressesFromURL(bstrURL,bstrAuth)
    從指定的網(wǎng)制(URL)讀取并添加郵件列表。

    GetMessageBodyFromURL(同上)
    刪除郵件正文并用指定的URL的內(nèi)容代替。

    KeyInformation(keyIdentifier):pointer
    返回一個(gè)PGPKey對(duì)象。

    LoadFromStream(Stream)
    從數(shù)據(jù)庫流讀取數(shù)據(jù),該數(shù)據(jù)庫流必須符合RFC822標(biāo)準(zhǔn)。

    LogCustomMessage(Message)
    給Jmail日志文件添加自定義日志。此函數(shù)只有在logging屬性被設(shè)置為True時(shí)有效。

    Nq()
    將郵件追加到發(fā)送隊(duì)列等待發(fā)送。

    ParseMessage(MessageSource)
    解析一個(gè)郵件,數(shù)據(jù)流必須符合RFC822格式標(biāo)準(zhǔn)。

    SaveToStream(Stream)
    保存郵件到數(shù)據(jù)流,數(shù)據(jù)流必須符合RFC822格式標(biāo)準(zhǔn)。

    Send(MailServer,enque):Boolean
    發(fā)送郵件。郵件服務(wù)器是一個(gè)描述郵件服務(wù)器名稱或地址的字符串,用戶名和密碼是可選項(xiàng)。當(dāng)要發(fā)送認(rèn)證郵件時(shí)使用格式為:用戶名:密碼@郵件服務(wù)器

    SendToNewsGroup(ServerName,NewsGroup)
    使用指定的NNTP服務(wù)器發(fā)送郵件到新聞組,多個(gè)郵件用“,”隔開。

    About():string
    設(shè)置一些附加信息。

    Attachments():Pointer
    返回郵件的附件集合。Set Attachments=Message.Attachments

    Body():String
    返回郵件正文。Response.Write (Message.Body)


    BodyText():String
    返回全部的文本正文。Response.Write (Message.BodyText)

    Charset():String
    設(shè)置郵件使用的字符集。默認(rèn)為US-ASCII,支持中文則設(shè)置為GB2312。

    ContentTransferEncoding():String
    設(shè)置郵件編碼。默認(rèn)為:Quoted-Printable.

    ContentType():string
    返回正文類型。

    Date():Date
    返回郵件發(fā)送時(shí)間。

    DeferredDelivery():Date
    設(shè)置郵件定時(shí)發(fā)送。

    Encoding():String
    設(shè)置附件的默認(rèn)編碼:Base64或Quoted-Printable

    EncryptAttachments():Boolean
    設(shè)置為True時(shí),所有的附件都被加密,當(dāng)然是編譯器可用的情況下。其默認(rèn)值為True.

    ErrorCode():Integer
    如果message.silent設(shè)置為True時(shí),該函數(shù)包含錯(cuò)誤號(hào)。

    ErroeMessage():String
    如果message.silent設(shè)置為True時(shí),該函數(shù)包含錯(cuò)誤描述。

    ErroeSource():String
    如果message.silent設(shè)置為True時(shí),該函數(shù)包含錯(cuò)誤來源。

    From():String
    返回或設(shè)置發(fā)件人的Email地址。

    FromName():String
    返回或設(shè)置發(fā)件人的名字。

    HtmlBody():String
    返回或設(shè)置郵件正文的HTML部分。

    ISOEncodeHeaders():Boolean
    郵件頭是否使用iso-8859-1編碼。(默認(rèn)為True)

    Log():String
    當(dāng)Logging為True時(shí),該函數(shù)返回創(chuàng)建的日志。

    Logging():Boolean
    是否啟用日志。Message.Logging=True時(shí),啟用日志。

    MailData():String
    返回郵件的源代碼。

    MailDomain():String
    設(shè)置發(fā)送郵件時(shí)使用的郵件服務(wù)器。

    MailServerPassWord():String
    當(dāng)郵件服務(wù)器使用SMTP發(fā)信認(rèn)證時(shí),該函數(shù)設(shè)置登錄密碼。

    MailServerUserName():String
    當(dāng)郵件服務(wù)器使用SMTP發(fā)信認(rèn)證時(shí),該函數(shù)設(shè)置登錄帳號(hào)。

    MimeVersion():String
    聲明Mime版本,默認(rèn)為1.0。

    MsPickupdirectory():String
    指定MS SMTP服務(wù)的Pickup文件夾的位置。

    PGPEncrypt():Boolean
    當(dāng)郵件是使用PGP發(fā)送時(shí)并該屬性被設(shè)置為True時(shí),該郵件將被自動(dòng)加密。

    PGPSign():Boolean
    當(dāng)郵件是使用PGP發(fā)送時(shí)并該屬性被設(shè)置為True時(shí),該郵件將被自動(dòng)簽名。

    Priority():Byte
    設(shè)置郵件的優(yōu)先級(jí):1、2和3

    Recipients():Pointer
    返回收件人集合。

    RecipientsString():String
    返回收件人集合(只讀)。

    ReplyTo():String
    指定一個(gè)回復(fù)地址。

    Silent():Boolean
    當(dāng)設(shè)置為True時(shí),Send()方法就會(huì)忽略錯(cuò)誤并不將錯(cuò)誤信息返回給操作系統(tǒng)。

    SimpleLayout():Boolean
    當(dāng)設(shè)置為True時(shí),發(fā)信時(shí)Jmail不會(huì)添加郵件頭到郵件里。

    Size():Integer
    返回郵件的總字節(jié)數(shù)。

    Subject():String
    設(shè)置郵件標(biāo)題。

    Text():string
    返回完整的郵件內(nèi)容。

    Version():String
    返回Jmal的版本信息。




    4、 Headers對(duì)象

    屬性(或方法)
    描述

    GetHeader(HeaderName):String
    返回指定的郵件頭的值。

    Text():String
    返回所有的郵件頭的值。




    5、 Recipients對(duì)象

    屬性(或方法)
    描述

    Add(Value)
    追加一個(gè)收件人到集合中。

    Clear()
    清除集合中的全部記錄。

    Count():Integer
    返回集合中收件人的總數(shù)。

    Item(Index):Pointer
    返回集合中的一個(gè)指定的收件人。




    6、 Recipient對(duì)象

    屬性(或方法)
    描述

    New(Name,Email,recipientType):Pointer
    創(chuàng)建一個(gè)可以添加到收件人集合中Recipients的收件人。

    Email():String
    返回收件人的郵件。

    Name():String
    返回收件人的姓名。

    ReType():Integer
    返回收件人模式(收件人To=0,抄送CC=1,暗送BCC=2)。




    7、 Attachments對(duì)象

    屬性(或方法)
    描述

    Add(Attachment)
    添加一個(gè)附件到集合。

    Clear()
    清除集合中的全部附件。

    Count():Integer
    返回集合中附件的總數(shù)。

    Item(Index):Pointer
    返回集合中指定的附件。
    posted @ 2005-07-01 10:45 一天一點(diǎn)愛戀 閱讀(241) | 評(píng)論 (0)編輯 收藏
     
    今天,我學(xué)會(huì)了用jmail 發(fā)郵件!!!但愿我每天都在成長(zhǎng)中!呵呵

    方法是:
    1,下載jmail
    2,安裝,
    3,找到dll拷貝到同一級(jí)目錄下
    4,注冊(cè),普通的,大多數(shù)dll無需注冊(cè),只需要放在與exe相同的目錄下就可以了。不推薦放在
    system之類的目錄中。
    只有com服務(wù)器的dll需要注冊(cè)(類似ocx)。一般不需要參數(shù)
    regsvr32 abc.dll
    反注冊(cè):
    revsvr32 /u abc.dll
    5,最后:
          <%
         Set jmail = Server.CreateObject("JMAIL.Message")   '建立發(fā)送郵件的對(duì)象
         jmail.silent = true    '屏蔽例外錯(cuò)誤,返回FALSE跟TRUE兩值j
         jmail.logging = true   '啟用郵件日志
         jmail.Charset = "GB2312"     '郵件的文字編碼為國(guó)標(biāo)
         jmail.ContentType = "text/html"    '郵件的格式為HTML格式
         jmail.AddRecipient   "
    ntlizheng@eyou.com"   '郵件收件人的地址
         jmail.From = "
    ntlizheng@126.com"   '發(fā)件人的E-MAIL地址
         jmail.MailServerUserName = "ntlizheng"     '登錄郵件服務(wù)器所需的用戶名
         jmail.MailServerPassword = "#######"     '登錄郵件服務(wù)器所需的密碼
         jmail.Subject = "Mail Subjectntlizheng"    '郵件的標(biāo)題
         jmail.Body = "Mail dddddBody"      '郵件的內(nèi)容
         'jmail.Prority = 1      '郵件的緊急程序,1 為最快,5 為最慢, 3 為默認(rèn)值
         jmail.Send("smtp.126.com")     '執(zhí)行郵件發(fā)送(通過郵件服務(wù)器地址)
         jmail.Close()   '關(guān)閉對(duì)象
      response.write "______________here"
      response.end
    %>
    6:成功了,呵呵,好爽啊!                    
                                                                                                          9:57:33



    呵呵,一個(gè)新單詞:
    簡(jiǎn)明英漢詞典
    encryption
    金軟件山
    編密碼
    Encryption
    軟King件Soft
    [計(jì)] 加密術(shù),密碼術(shù)

    MASS
    金soft軟件king山
    =Manual Analysis Scan System 人工分析掃描系統(tǒng)
    mass
    軟King件Soft
    n.
    塊, 大多數(shù), 質(zhì)量, 群眾, 大量
    adj.
    群眾的, 大規(guī)模的, 集中的
    vt.
    使集合
    vi.
    聚集

    posted @ 2005-07-01 09:50 一天一點(diǎn)愛戀 閱讀(238) | 評(píng)論 (0)編輯 收藏
    僅列出標(biāo)題
    共8頁: 上一頁 1 2 3 4 5 6 7 8 
     
    Copyright © 一天一點(diǎn)愛戀 Powered by: 博客園 模板提供:滬江博客
    主站蜘蛛池模板: 亚洲一区二区电影| 亚洲国产婷婷综合在线精品| 免费爱爱的视频太爽了| 国产成人免费片在线视频观看| 四虎在线播放免费永久视频| 中文字幕亚洲激情| 久久亚洲精品成人AV| 亚洲av一本岛在线播放| 成人婷婷网色偷偷亚洲男人的天堂| 人成免费在线视频| 日韩精品无码免费一区二区三区| 午夜宅男在线永久免费观看网| 免费观看午夜在线欧差毛片| 亚洲国产一二三精品无码| 亚洲国产精品久久久久秋霞影院| 亚洲AV无码一区二区乱子仑| 中文字幕免费观看全部电影| 亚洲成年人免费网站| 日本人护士免费xxxx视频| 亚洲精品无码久久久久去q| 亚洲性色高清完整版在线观看| 色偷偷亚洲第一综合网| 国产一级淫片a免费播放口| 成年人在线免费看视频| 永久亚洲成a人片777777| 亚洲综合色区中文字幕| 久久最新免费视频| 亚洲人成电影网站免费| 中文字幕亚洲无线码| 精品亚洲成A人无码成A在线观看| 免费人成视频在线观看免费| 真实国产乱子伦精品免费| 又粗又大又猛又爽免费视频| 久久亚洲日韩精品一区二区三区| 免费人成又黄又爽的视频在线电影| 最近中文字幕高清免费中文字幕mv| 免费播放春色aⅴ视频| 亚洲妇女水蜜桃av网网站| xxxxxx日本处大片免费看| 丁香花免费高清视频完整版| 中国亚洲女人69内射少妇|