1. 程式人生 > >ASP 如何讀寫一個文字檔案

ASP 如何讀寫一個文字檔案

利用Active Server Pages指令碼,你就幾乎完全可以控制伺服器的檔案系統。需要如下的元件: ■FileSystemObject:這個物件包括了一些基本的對檔案系統進行操作的方法,比如說,複製和刪除資料夾或者檔案 ■TextStream:這個物件用來讀寫檔案 ■File:它的方法和屬性被用來處理單獨的檔案。 ■Folder:它的方法和屬性被用來處理資料夾。這部分介紹如何讀寫一個文字檔案。這對文字檔案有很多用處,包括下面這些。■一個常用的日誌,利用文字檔案記錄訪問者的活動以供日後參考。你可以記錄諸如訪問者IP地址,瀏覽器型別等等你能得到而且想要了解的東西。■Form中的資料,你可以將使用者在Form的文字框中填寫的東西記入文字檔案,儘管使用資料庫會更加有效。

■每日新聞,將每日的新訊息記錄到文字檔案,然後可以在很多檔案中讀出來顯示  對文字檔案的寫操作要建立並且寫入一個文字檔案,你應當使用FileSystemObject和TextStream物件。首先,你需要建立一個FileSystemObject物件的事例,然後,再利用CreateTextFile()以該事例建立一個TextStream物件的事例,最後利用TextStream物件的WriteLine()方法來寫入檔案。下面是這個例子: <%Set MyFileObject=Server.CreateObject(“Scripting.FileSystemObject”)Set MyTextFile=MyFileObject.CreateTextFile(“c://mydir//test.txt”)
MyTextFile.WriteLine(“歡迎進入邁至科網路ASP教程檔案操作示例!”MytextFile.Close%>這個例子建立了一個名字為test.txt的檔案,該檔案位於c://mydir//,WriteLine()方法被用來將那一句話寫入該檔案。最後,這個TextStream物件的事例關閉並且釋放所有資源,下面部分將對每一個步驟進行仔細解釋。  注意如果你需要虛擬路徑轉化為真實路徑(這樣操作使得站點具有更強的可移植性),可以用Server.MapPath()方法,例如下面這個例子:PhysicalPath=Server.MapPath(“/private/test.txt”)假設虛擬路徑/private對應於真實路徑c://net//private,那麼這個PhysicalPath的值將是c://net//private//test.txt
 CreateTextFile()方法用來建立一個新的文字檔案,當這個方法被呼叫,那麼就返回一個TextStream物件,這個方法有一個必須的引數和兩個可選的引數■FileSpecifier,限定要建立的檔案及路徑,如果沒有這個引數,顯然是要報錯的。 ■Overwrite,這個引數是可選的,預設為TRUE,如果存在同名的檔案,依據這個引數判斷是否進行覆蓋操作,如果賦為FALSE,那麼存在同名檔案時會返回錯誤資訊。 ■Unicode,這個引數可選,預設為False,指示該檔案是否用ASC碼形式進行建立和儲存。如果選擇TRUE,將以Unicode方式建立。再利用CreateTextFile()方法建立了文字檔案後,你就可以使用TextStream物件來對檔案進行讀寫,在寫操作時,有如下的方法■Write(String).這個方法將一個欄位寫入文字檔案。 ■WriteLine(String),這個方法是在檔案中新增字串和一個分行符,這裡面的string引數可選,如果沒有的話,則新增一個分行符。 ■WriteBlankLines(lines),顧名思義,這是允許使用者在檔案中指定數目個分行符。 ■close.這個方法就是關閉一個開啟的TextStream檔案並釋放其佔用的資源。  下面是一個連續在檔案中輸出32行同樣字串的例子指令碼:  <% Set MyFileObject=Server.CreateObject(“Scripting.FileSystemObject”)Set MyTextFile=MyFileObject.CreateTextFile(“c://mydir//test.txt”)For i=1 to 32MyTextFile.WriteLine(“Hello World!”)NextMyTextFile.Close%>  在文字檔案中讀取和追加資料這裡,首先要做的依然是建立一個FileSystemObject物件的事例,然後,利用OpenTextFile()方法來建立一個TextStream物件的事例,最後,你就可以用TextStream物件的ReadLine方法來對檔案讀取,下面是個例子: <%Set MyFileObject=Server.CreateObject(“Scripting.FileSystemObject”)Set MyTextFile=MyFileObject.OpenTextFile(“c://mydir//test.txt”)While not MyTextFile.AtEndOfStreamResponse.Write(MyTextFile.ReadLine)WendMyTextFile.Close%>  這個指令碼將文字檔案Test.txt檔案中所有的內容讀出來並且顯示在瀏覽器上。如果檔案不存在,回顯示相應錯誤資訊(在下一個部分,你會學到怎樣檢測一個檔案是否存在)其中While…Wend迴圈是將檔案內容一行一行的迴圈讀取,其中如果沒有到達檔案末尾,那麼AtEndOfStream屬性就會是False,直到末尾時變為True。  下面是讀取檔案時可能會用到的屬性■AtEndOfLine。這個屬性判斷是否到了檔案中一個特定行的末尾,如果不是,則為False,反之為True ■AtEndOfStream。就是這個例子中用到的,判斷是否到了該檔案的結尾並依此返回True和False ■Column。這個屬性判斷當前字元在該行的位置,返回一個整數值。 ■Line。這個屬性判斷當前行在檔案中的行數,返回一個整數值  除了使用ReadLine方法以外,你當然還可以使用Read()方法。Read()方法會從指定開啟的文字檔案中返回指定數目個字元。下面是用這個方法的示例:  <%Set MyFileObject=Server.CreateObject(“Scripting.FileSystemObject”)Set MyTextFile=MyFileObject.OpenTextFile(“c://mydir//test.txt”)While NOT MyTextFile.AtEndOfLineResponse.Write(MyTextFile.Read(1))WENDMyTextFile.Close%>這個指令碼從文字檔案中接受第一行,每次接受顯示一個字元,利用AtEndOfLine屬性一直到行尾截止,由Read(1)一個一個讀取。  下面是從文字檔案讀取資料時要用到的方法■Read(Number).從文字檔案中讀取限定數目個字元 ■ReadLine.從文字檔案中讀取一行(換行符不返回) ■ReadAll.這個方法接受TextStream檔案的所有內容 ■Skip(Number).這個方法從一個開啟的文字檔案中跳過指定數目個字元 ■close關閉當前開啟的檔案並釋放所佔用的資源。  一般說來,OpenTextFile()方法是用來讀取資料的,但是你也可以用它追加資料資訊,例如,你希望在該文字資料中追加一些新內容,可以見下面的示例:  <%Set MyFileObject=Server.CreateObject(“Scripting.FileSystemObject”)Set MyTextFile=MyFileObject.OpenTextFile(“c://mydir//browser.log”,8,TRUE)MyTextFile.WriteLine(Request.ServerVariables(“HTTP_USER_AGENT”))MyTextFile.Close%>這個指令碼用於在網站中建立一個日誌檔案。無論什麼時候這個指令碼執行,此時的瀏覽器型別就會追加到該日誌檔案中,瀏覽器資訊由ServerVariables集合接收。  注意有關ServerVariables集合的情況參見本書的第14章有關小節。這裡面需要說明的是,如果browser.log不存在,則會自動建立,這是使用了OpenTextFile()方法的兩個引數:IOMode和Create引數。  下面介紹針對於OpenTextFile()方法的所有引數■FileSpecifier,限定要進行讀寫或者追加的文字檔名稱 ■IOMODE,可選引數,指示該檔案是被用來讀,寫還是追加。預設為1表示讀,設為2表示進行寫操作,進行追加操作則設為8。 ■Create,可選引數,如果檔案不存在是否建立,預設為False,如果希望進行建立,則設為TRUE ■Format,可選引數,指示檔案是ASCII碼制格式還是Unicode格式,作為預設的ASCII碼制檔案,其值為-2,如果希望設為Unicode格式,此引數設為-1你不能在當前版本的Active Server Pages中使用常量,例如,你如果希望進行檔案 追加,你必須使用數字8作為引數而不是什麼常量。  範例應用這部分提供了一個範例應用來使得讀者對這些物件、方法、屬性、以及集合、有更加明晰的認識瞭解。在世界最大的網上書店,美國亞馬遜網上書店(www.amazon.com)正在進行(也許您在閱讀時這個活動還在進行)網上的故事合創運動,由John Updike先生寫入 該故事的第一部分,每一天,訪問者都可以根據自己的意願線上進行故事發展的寫作,同時每一天都會對寫的最好的給出$1000的獎賞(如果您的英語寫作足夠好,不妨一試)。這個故事是大家一起新增的。這真是個好主意,這下子網站的‘回頭客’就會激增,同時產生巨大的社會影響力,你完全可以在自己的網站上實現類似的應用。最簡單的方法就是直接把這個範例拿出去放到你的網站上,當然,如果你的網站還不能支援Active Server Pages,那麼只好說你太不幸運了(見圖19.1)。  例子19.1 Story.asp指令碼  <%IF NOT Request.Form(“NextLine”)=”” THENSet MyFileObject=Server.CreateObject(“Scripting.FileSystemObject”)Set MyTextFile=MyFileObject.CreateTextFile(“C://MyDir//TheStory.txt”,8,TRUE)MyTextFile.WriteLine(Request.Form(“NextLine”))MyTextFile.CloseEND IF%><HTML><HEAD><TITLE>線上故事接龍</TITLE></HEAD><BODY><hr><%Set MyFileObject=Server.CreateObject(“Scripting.FileSystemObject”)Set MyText=MyFileObject.OpenTextFile(“C://MyDir//TheStory.txt”)WHILE NOT MyTextFile.AtEndOfStreamResponse.Write(“&nsp;&nsp;”&MyTextFile.Readline)WENDMyTextFile.Close%><HR><H3>請輸入這個故事的新行:</h3><Form method=”post” action=”Story.asp”><input name=”NextLine” Type=Text Size=70><input type=Submit Value=”確認新增這一句”></Form></Body></HTML>這個Active Server Pages檔案包含兩段主要指令碼,第一部分是看是否有Form傳來的 句子資訊,如果有,則該句子新增到TheStory.txt檔案中去。第二部分是顯示TheStory.txt檔案中的內容,請注意其中每一行之間用兩個&nbsp;來進行分隔,參見HTML中符號含義。然後用一個Form提供訪問者進行新增,其中Form執行還是這個檔案,(就是第一部分指令碼處理),因此注意該檔名稱必須是”story.asp”  其實這個應用實在是過於簡單,但是作一個留言版相當合適,而且在該檔案膨脹過大時,只要刪除就可以了,(不要忘了前面的指令碼中將OpenTextFile的Create引數設為TRUE)是可以建立文字檔案的。