在 Visual Basic .NET 中選擇文件 I/O 選項(微軟)(一) - 中國WEB開發者網絡 (http://www.webasp.net) -- 技術教程 (http://www.webasp.net/article/) --- 在 Visual Basic .NET 中選擇文件 I/O 選項(微軟)(一) (http://www.webasp.net/article/4/3974.htm) |
| -- 作者:未知 -- 發佈日期: 2003-07-12 |
| 在 Visual Basic .NET 中選擇文件 I/O 選項 Cat Francis Visual Studio Team Microsoft Corporation 2002 年 4 月 摘要:本文是針對 Visual Basic 程序員而寫的,他們可能會搞不清 Visual Basic .NET 中的多種文件 I/O 訪問方法。可用的方法包括 Visual Basic .NET 運行時提供的方法、FileSystemObject 以及公共語言運行時提供的方法。閱讀完本文後,有經驗的開發人員將很快熟悉這三種方法,並且可以得心應手地從中進行選擇。本文包含一些指向英文站點的鏈接。 目錄 簡介 Visual Basic .NET 中的文件方法 Visual Basic .NET 中的 FileSystemObject 公共語言運行時文件方法 總結 簡介 有經驗的 Visual Basic® 開發人員最初可能會認為,Visual Basic .NET 中的變化使本來已經熟悉的領域變得陌生而難以駕馭。其實,過去開發的成果仍然可以使用。例如,Visual Basic 運行時文件 I/O 方法就是大家比較熟悉的。同樣,以前曾涉獵過 FileSystemObject 對象的開發人員也可以繼續在這一領域暢遊。儘管公共語言運行時領域可能讓人感到陌生並且到處都是以對像為中心的「怪物」,但同時,它提供的功能卻極具誘惑力,例如 FileSystemWatcher 或 FileIOPermissions 類中的新功能。 事實上,唯一讓 Visual Basic .NET 開發人員望而卻步的是如何從這三種方法中進行選擇。對許多應用程序而言,對文件和目錄進行操作是最重要的,但是 Visual Basic .NET 所提供的靈活方法可能會使人感到困惑,並且會提出下列問題:Visual Basic .NET 提供什麼樣的文件訪問?何時使用 FileSystemObject 對像?使用公共語言運行時中的方法有哪些好處?是否需要專門使用一種方法?如何選擇方法? Visual Basic .NET 中的文件方法 讓我們先看看 Microsoft.VisualBasic 命名空間,這可以為那些被全新的 .NET 領域嚇壞的開發人員帶來一些安慰和信心。命名空間包含許多熟悉的函數和方法。除了部分名稱有少許改動外,大部分名稱仍保持不變,如 Dir、Input、Print、Seek、Write 等等。 在選擇運行時函數時,主要應考慮寫入文件或從文件中收集的信息的類型。Visual Basic .NET 為三種類型的文件提供了訪問方法,每種方法適用於一種特定的數據類型:二進制、順序和隨機。 二進制訪問,允許您以任意方式存儲和訪問數據,這種方法對於變長字段尤為有用。 隨機訪問,允許您以記錄的方式存儲和訪問信息,這種方法假定記錄是等長的。 順序訪問,允許您在文本文件中讀取和寫入字符串。 有關詳細信息,請參閱 Data Access Functions。 這些不同類型的文件訪問所使用的函數發生了一些變化。最顯著的變化是用 FilePut/FilePutObject 和 FileGet/FileGetObject 函數代替 Put 和 Get 函數。在 Visual Basic .NET 中,FilePut 和 FileGet 映射到 Put 和 Get 函數;FilePutObject 和 FileGetObject 用於將 Object 類型(等價於 Visual Basic 早期版本中的 Variant 類型)的對象寫入文件。有關詳細信息,請參閱 Variant。 例如,下面是 Visual Basic 6.0 的代碼: Dim Person As Variant If IdentifyPeopleByName Then Person = "我的姓名 1" Else Person = 564 EndIf Put #1, , Person 在 Visual Basic .NET 中變為: FileOpen(1, "c:\test.txt", OpenMode.Binary) Dim Person As Object If IdentifyPeopleByName Then Person = "我的姓名 1" Else Person = 564 EndIf FilePutObject(1, Person) FileClose(1) 總之,對於有經驗的 Visual Basic 程序員來說,這一方面應該很容易掌握。下表列出了 Visual Basic .NET 中用於文件和目錄操作的函數,並提供了介紹各個函數的相應主題的鏈接。 函數 說明 CurDir 返回表示當前目錄的 String 值。 Dir 返回 String 值,表示與指定模式或文件屬性相匹配的文件名、目錄名或文件夾名,或者表示驅動器的卷標。 EOF 當為隨機輸入或順序輸入而打開的文件到達末尾時,返回 Boolean 值 True。 FileClose 將 I/O 寫入到使用 FileOpen 函數打開的文件。 FileCopy 複製文件並保留原文件。 FileDateTime 返回 Date 值,表明最近一次修改文件的日期和時間。 FileLen 返回 Long 值,表明文件的長度(字節)。 FileOpen 打開用於輸入或輸出的文件。 FreeFile 返回 Integer 值,指定 FileOpen 函數可以使用的下一個文件的編號。 GetAttr 返回 FileAttribute 值,表示文件、文件夾或目錄的屬性。 Input 從打開的順序文件讀取數據並將該數據分配給變量。 InputString 返回 String 值,包含在 Input 或 Binary 模式下打開的文件中的字符。 LineInput 從打開的順序文件中讀取一行並將其分配給 String 變量。 Loc 返回 Long 值,指定在打開的文件中的當前讀/寫位置。 LOF 返回 Long 值,表示使用 FileOpen 函數打開的文件的大小(字節)。 Print 將顯示格式的數據寫入順序文件。 PrintLine 將顯示格式的數據寫入順序文件,並以回車符結束。 Seek 返回 Long 值,指定在使用 FileOpen 函數打開的文件中的當前讀/寫位置;或為使用 FileOpen 函數打開的文件中的下一個讀/寫操作設置位置。 SetAttr 設置文件的屬性信息,如 ReadOnly、Hidden、Directory、Archive 等等。 Write 將數據寫入順序文件。通常使用 Input 函數從文件中讀取使用 Write 函數寫入的數據。 WriteLine 將數據寫入順序文件,並以回車符結束。 優點和缺點 Visual Basic .NET 運行時提供的函數有兩個主要優點,即為開發人員所熟悉並且易於使用。Visual Basic .NET 的核心功能仍然保留其為人所熟悉、直觀和靈活的特點,同時提供了舒適的 .NET 開發環境。 同樣,將在 Visual Basic 早期版本中編寫的程序升級到 .NET,或者創建能夠與在 Visual Basic 早期版本中編寫的應用程序正常交互的應用程序,也相對簡單。有關早期版本代碼升級的詳細信息,請參閱 Preparing a Visual Basic 6.0 Application for Upgrading。 Visual Basic .NET 函數還提供二進制文件訪問,為使用變長字段時提供了更好的選擇,而 FileSystemObject 對像(將在下一節介紹)則沒有此功能。 最後一點,在從 Visual Basic .NET 中使用 Visual Basic .NET 內置文件 I/O 函數時,沒有需要特別注意的事項(如需要導入命名空間)。 Visual Basic .NET 文件 I/O 函數僅支持 String、Date、Integer、Long、Single、Double 和 Decimal 寫入類型以及這些類型的結構和數組,這是使用這些函數時的一個缺點。此外,不能將類序列化,因此,在這些情況下直接使用 System.IO 類性能可能會更佳。 代碼示例 如以下各例所示,使用 Visual Basic 運行時方法進行文件和目錄操作是開發人員所熟悉的。 以下示例將檢查文件是否存在,如果存在,則使用 FileCopy 函數將其複製到新文件。 Private Sub CopyFiles() Dim checkFile As String checkFile = Dir$("c:\test.txt") If checkFile = "test.txt" FileCopy "c:\test.txt", "c:\new.txt" End If End Sub 以下示例使用 FilePut 函數將數據寫入文件,FilePut 函數與 Visual Basic 早期版本的 Put 函數相對應。結構 CustomerRecord 的三個記錄被寫入文件。 Structure CustomerRecord Public OrderNumber As Integer Public Name As String Public OrderDate As Date End Structure Sub WriteData() Dim MyRecord As CustomerRecord Dim RecordNumber As Integer Dim RecordDate As Date ' 打開文件進行隨機訪問。 FileOpen(1, "C:\TESTFILE.txt", OpenMode.Binary) For RecordNumber = 1 To 3 ' 循環 3 次。 MyRecord.OrderNumber = RecordNumber ' 定義 OrderNumber。 MyRecord.OrderDate = RecordDate ' 定義 OrderDate。 MyRecord.Name = "我的姓名" & RecordNumber ' 創建字符串。 FilePut(1, MyRecord) ' 將記錄寫入文件。 Next RecordNumber FileClose(1) End Sub FileSystemObject 與 Microsoft.VisualBasic 命名空間提供的函數和方法類似,Visual Basic 早期版本的用戶也應當熟悉 FileSystemObject 對象。在 Visual Basic .NET 中仍然可以使用此對象。 FileSystemObject (FSO) 模型將文件、目錄和驅動器表示為 COM 對象,每個對象都有自己的屬性和方法。您可以創建和操縱這些對象,並使用這些對象的屬性來查找信息,如目錄內容、文件大小、對象的創建時間等等。通過創建和訪問 FileSystemObject 對象的實例,可以訪問表示系統文件、目錄和驅動器的對象。 FSO 對像模型位於 Microsoft 腳本運行時類型庫 (Scrrun.dll) 中,支持通過 TextStream 對像創建和操縱文本文件。有關詳細信息,請參閱 TextStream。FileStream 類圍繞文件提供一個數據流,允許對文件系統進行同步或異步讀寫操作以及緩衝輸入和輸出,以改善性能。信息被寫入緩衝區,只有當緩衝區已滿或調用 Close 方法時,緩衝區中的內容才會被寫入文件。有關詳細信息,請參閱 FileStream。 優點和缺點 FSO 的主要優點是,它可以將許多文件 I/O 函數集合到單個對象中。通過創建該對象的實例,可以訪問對象的方法和屬性。 下表列出了 FSO 對像模型的基本組件,並提供了與相應主題對應的鏈接,這些主題列出了適用於創建和操縱文件、驅動器及目錄的屬性和方法。 對像 說明 FileSystemObject 創建與刪除驅動器、文件夾和文件,獲取其信息並對其進行常規操作。與此對像相關的許多方法都與其他對像中的相應方法相同。 Drive 獲取關於連接到系統的驅動器的信息,如可用空間及其共享名稱。 File 創建,刪除或移動文件,以及在系統中查詢文件的名稱、路徑和其他信息。 Folder 創建,刪除或移動文件夾,以及在系統中查詢文件夾的名稱、路徑和其他信息。 TextStream 讀寫文本文件。 FSO 對像模型也適用於線程。它提供了一個用於異步 I/O 的構造函數,如當使用 BeginRead 和 BeginWrite 方法時,該函數可使主線程繼續,允許用戶稍後再處理數據。多個 I/O 請求可以同時掛起。 但是,FSO 也有一些不足之處。如上所述,它只能對文本文件進行操作。要操縱二進制文件,您必須使用指針指向內存地址或字節數組,但 FSO 對像不支持此操作。 此外,當您讀取或寫入大量內容時,存儲在緩衝區中的信息可能會產生很高的內存命中率。還有,您不能管理許可權限或文件和文件夾屬性。 |
| webasp.net |