跳轉到內容

Visual Basic/檔案

來自華夏公益教科書,開放書籍,開放世界

Visual Basic 的另一個重要部分是檔案輸入/輸出,即處理檔案。在程式設計時,您可能希望在某些時候儲存資料,以便以後訪問。這就是檔案 I/O 的用處。VB 允許我們執行 Windows 資源管理器和 DOS 命令列中提供的大多數操作。在您開始之前,您需要了解檔案 I/O 的工作原理。

資料佈局

[編輯 | 編輯原始碼]

VB 通常將資料排列成記錄和欄位,以方便程式設計師使用。最好的解釋方法是透過舉例說明

 Bob,Larry,George
 Kevin,Ken,Alec

這顯然是包含姓名的資料。每行資料稱為一條記錄。因此,第一條記錄包含 Bob、Larry 和 George。一個欄位是記錄中的每一項。因此,第一條記錄中的第一個欄位是 Bob,第二個欄位是 Larry,依此類推。您可以根據需要設定任意數量的欄位和記錄。
記錄和欄位實際上只是為了方便程式設計師而建立的。為了獲得更大的靈活性,您也可以將整個內容視為一個字串。您可以使用內建的 Split() 函式將字串拆分為記錄和欄位。

當程式從外部來源接收資料時,它被認為是輸入。在 Visual Basic 中,此來源通常是標準文字檔案,具有 .txt 副檔名(可以使用記事本讀取)。首先,您需要開啟要從中讀取資料的檔案。這是使用以下程式碼完成的

 Open <filename> For <mode> As <channelnumber>

例如

 Open "c:\filename.txt" For Input As #1

檔案路徑可以是您想要的任何內容,如果不存在,將建立新的檔案(和目錄)。檔案的副檔名並不重要。它不會影響檔案的內容或寫入/讀取檔案的過程。所以你也可以這樣做

 Open "c:\filename.myfile" For Input As #1

或者這樣

 Open "c:\filename" For Input As #1

開啟和檔案路徑是不言自明的。但是,“用於輸入”表示它被用來從外部檔案接收資料,VB 將資料從檔案“輸入”到變數中。在輸出(寫入檔案)時,這將更改為“用於輸出”。當我們想以二進位制方式開啟檔案時,它是“用於二進位制”。“作為 #1”是指正在使用的通道。當您要從檔案中查詢特定資訊時,您將使用“用於隨機”。通道可以被視為 Visual Basic 為檔案設定的路徑。一個通道一次只能使用一個檔案。因此,如果您想開啟多個檔案而不關閉任何檔案,您可以使用不同的通道。要輸入一行資料,它非常簡單

 Input <channel>, <variables>

例如

 Input #1, x, y, z

這將從通道 1 連線到的任何內容中讀取資料。它將把當前記錄的第一個欄位儲存到 X 中,第二個欄位儲存到 Y 中,第三個欄位儲存到 Z 中。
最後,我們應該始終在完成工作後關閉檔案。語法很簡單

 Close <channel>

舉個例子

 Close #1


有關使用輸入的更多資訊將在“資料使用”部分介紹。


注意:如果程式碼將成為更大程式的一部分,應以動態方式而不是硬編碼的方式獲取通道號。這是使用函式 FreeFile() 完成的

  Dim nLogFile As Long
  nLogFile = FreeFile()
  Open "c:\filename" For Input As #nLogFile
  ...
  Close #nLogFile

輸出與輸入非常相似。唯一的區別是,它將資訊傳送出程式並進入檔案。再次,我們只使用文字檔案 (.txt)。首先,您必須開啟檔案

 Open "C:\filepath.txt" For Output As #1

您可能已經注意到,與開啟用於輸入的檔案唯一的區別是“用於輸出”。完成此操作後,其他所有操作都非常簡單。

 Write #1, x, 5

假設 X = 3,如果您開啟文字文件,它將如下所示

 3, 5

您可以將任何值或變數寫入檔案,但需要注意的是,在寫入字串時,應將其放在引號中。如果它是包含字串的變數,則會自動執行此操作。另一個重要提示是,兩個連續的寫入語句將寫入不同的行。例如

 Write #1, 5, 4
 Write #1, 7, 4
 Write #1, "this is a string"

將出現在檔案中,如下所示

 5, 4
 7, 4
 "this is a string"

請記住,在輸出到檔案時,它將擦除文字中所有先前的資訊。要新增到現有資訊中,必須使用“追加”命令。

如果您將資料寫入檔案供其他程式使用,您可能會發現您不希望 VB 將引號放在您的字串周圍。您可以透過使用 Print 命令而不是 Write 命令來避免寫入引號。例如

 Print #1, "this is a string"

將出現在檔案中,如下所示

 this is a string

如果在執行時,正在處理的檔案被修改,並且添加了一行包含必要資料的新行,並且 open 語句以“#1”結束,那麼檔案中第 1 行中的任何內容都將被覆蓋(只有在檔案以 Output 方式開啟時)。為了解決這個問題,一個變數被宣告為 FreeFile(Dim FF as FreeFile)。這將開啟正在處理檔案中的第一個空閒插槽或行。新的 Open 語句將變為

 Open "C:\filepath.txt" For Output As FF

(將擦除檔案)

 Open "C:\filepath.txt" For Append As FF

(將不會擦除檔案)
使用第二個語句,將寫入檔案中的第一個空閒行。

如何指定檔案路徑

[編輯 | 編輯原始碼]

在實踐中,open 語句很少像這樣

 Open "C:\filepath.txt" For Append As FF

通常,檔案路徑將儲存在字串變數中

 Dim s As String
 s = "C:\filepath.txt" 
 Open s For Append As FF

變數s只需要儲存檔案的路徑。路徑可以是絕對路徑,例如

 s = "d:\users\me\my file.txt"

或當前目錄中的檔案(使用CurDir找出它是哪個)

 s = "my file.txt"

或相對於當前目錄的路徑,例如

 s = "..\you\your file.txt"

或像這樣

 s = "mysub\myother file.txt"

對於更具冒險精神的人來說,它還可以包括對伺服器上共享檔案的引用,該伺服器不使用驅動器號

 s = "\\someserver\someshare\somefile.txt"


可以在此處找到使用檔案讀取的示例窗體。在 Internet Explorer 中右鍵單擊“此處”,然後選擇“將目標另存為...”來儲存窗體檔案。

請上傳更多包含示例的檔案。這對開發人員來說將非常有幫助。


上一頁:陣列 目錄 下一頁:資料型別
華夏公益教科書