在開發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)為例:
Set AFileSystemObject = CreateObject("Scripting.FileSystemObjecct")
2.用FileSystemObject 來取得文字檔案物件TextStream
FileSystemObject 提供了兩種方法用於取得文字檔案物件TextStream,其中用於建立檔案的是CreateTextFile,用於開啟已存在檔案的是OpenTextFile,兩種方法的傳回結果都是一個TextStream 物件的實例,利用該物件可以進行文件的具體操作.
⑴ 建立一個新檔案建立新檔案的方法的具體格式為(以AFileSystemObject為例):
AFilesystemObject.CreateTextFile(NewFileName,OverwriteExistingFile,IsUnicode)
其中:
NewFileName 是一個string值,指定要建立的檔案的名稱,通常會為檔案的實際路徑加上檔案名稱,如C:webshareaspsampfiletest.txt
OverwriteExistingFile 是一個Boolean值,表示如果有同名檔案存在時是否覆寫原來的檔案.此參數可以省略,缺省時為False,即不覆寫原來檔案.
IsUnicode 是一個Boolean值,表示要建立的檔案是ASCII檔案還是Unicode文件,
此參數可省略,缺省時為False,即為ASCII檔.
⑵ 開啟已存在的檔案開啟已存在檔案的方法的具體格式為(以AFileSystemObject為例):
AFilesystemObject.OpenTextFile(FileName,IOMode,create,format)
其中:
FileName 是一個string值,指定要開啟的檔案的名稱,通常會為檔案的實際路徑加上檔案名稱,C:filepathtest.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
…
<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
<%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), -- 公司地址
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程式碼
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_WC_Library( WC_Library(
WC_Library( WC_Library( WC_Library( WC_Library(),
WC_CCompanyName,
WC_Address,
…
)
VALUES(
@in_CompanyName,
@in_CCompanyName,
@in_Address,
…
)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
RETURN -1
END
COMMIT TRAN
RETURN 0 BEGIN ROLLBACK TRAN RETURN -1 END COMMIT TRANRETURN 0
OFF
決定這篇全文,文章能為讀者帶來一定的幫助。