程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 在VB中使用文件對象

在VB中使用文件對象

編輯:VB綜合教程
自從VisualBasic第一次發布到現在,它的大部分主要的特性大都被修改了不下一次。但文件操作部分卻是個例外。在最原始的Basic語言中,文件就是用文件號(filenumber)來讀寫的。用一個數字來操作文件,或許者多少有一點晦澀難懂,這也令大多數的初學者感到不習慣和難以理解。
  
  隨著VisualBasicScriptingEdition2.0版本的發布,微軟提供了一種全新的文件操作方法——文件系統對象(FileSystemObject)。用對象編程,這正是開發者們所希望用到。這個對象,包括一些其他的相關對象,封裝了所有的文件操作。這篇文章將向你介紹這些對象,並且展示如何利用它們來編程。要使用這些對象,在VB的應用程序中就必須引用MicrosoftScriptingRuntime(C:WindowsSystemSCRRUN.DLL)對象庫。但是如果是為InternetExplore編寫VBScript,直接使用就可以了。下面是這些對象的概要:
  
  *Drive-代表一個單獨的驅動器,可以是軟驅,硬盤,或者是光驅等其他存貯介質。
  
  *Drives-一個集合對象,包括系統中所有的驅動器。
  
  *File-代表系統中的一個磁盤文件。
  
  *Files-集合對象,是一些文件的集合。典型的是代表一個目錄下的所有文件。
  
  *FileSystemObject-代表系統中整個文件系統的對象。包括所有驅動器,目錄和文件。
  
  *Folder-代表一個目錄,可以是本地的,也可以是遠程目錄。
  
  *Folders-一些目錄的集合體。
  
  *TextStream-文本流對象,代表一個用來讀寫的打開的文件。
  
  想得到系統中所有的驅動器的信息,可以用下面的這段代碼來實現。
  SubMain()
  DimobjFSOAsNewScripting.FileSystemObject
  DimdrvLoopAsScripting.Drive
  
  ForEachdrvLoopInobjFSO.Drives
  Debug.PrintdrvLoop.DriveLetter&":"
  IfdrvLoop.DriveType=Fixed_
  OrdrvLoop.IsReadyThen
  Debug.Print"Totalsize:"_
  &Format$(drvLoop.TotalSize/(1024^2),"#0.00Mb")
  Debug.Print"Freespace:"_
  &Format$(drvLoop.FreeSpace/(1024^2),"#0.00Mb")
  Debug.Print"VolumeLabel:"&drvLoop.VolumeName
  Else
  Debug.Print"Diskinformationunavailable"
  EndIf
  
  NextdrvLoop
  
  SetobjFSO=Nothing
  
  EndSub
  
  
  在試圖存取像軟盤,光盤這些可移動介質驅動器,特別是存取筆記本電腦的可交換驅動器的時候要注意:Windows總是認為驅動器是存在的,而不管是否真的有盤片在裡面。這時候可以用Drive對象IsReady對象來檢測驅動器是否准備好。否則可能造成VB應用程序的死鎖。
  
  Drive對象還有一些其他的屬性,可以用對象浏覽器來察看它所有屬性。
  
  除了可以遍歷所有的驅動器,你也可以遍歷某個文件夾下的所有文件。這在當你需要在整個驅動器中查找特定的文件的時候特別有用。Recursionisalsoveryhelpfulinthesecasessinceyouneedtokeepperformingthesameactionasyouworkyourwaydownthetree.下面這段代碼用來統計所有GIF文件的個數。它也可以很容易的修改成文件列表,對特定的文件做指定的操作,等等。其中的關鍵在於目錄數的遍歷:
  OptionExplicit
  Dimm_lngFileCountAsLong注釋:定義計數器
  Dimm_objFSOAsScripting.FileSystemObject注釋:定義文件系統對象
  
  SubMain()
  Setm_objFSO=NewScripting.FileSystemObject
  m_lngFileCount=0
  CheckFolder"C:"
  Debug.Print"C盤下GIF文件總數:"&m_lngFileCount
  EndSub
  
  SubCheckFolder(strPathAsString)
  DimobjFolderAsScripting.Folder注釋:文件夾對象
  DimobjFileAsScripting.File注釋:文件對象
  DimobjSubdirsAsScripting.Folders注釋:文件夾集合對象
  DimobjLoopFolderAsScripting.Folder注釋:文件夾對象
  
  Debug.Print"Checkingdirectory"&strPath
  SetobjFolder=m_objFSO.GetFolder(strPath)
  
  注釋:檢查目錄中的文件
  ForEachobjFileInobjFolder.Files
  IfUCase$(Right$(objFile.ShortPath,4))=".GIF"Then
  注釋:這一段是條件檢查,但找到的文件是否符合給定的條件,這兒通過取文件名的
  注釋:最後4位看是不是“.GIF“來判斷文件是否是GIF文件。
  m_lngFileCount=m_lngFileCount 1
  注釋:找到指定條件的文件後進行相應的操作,這兒是把計數器加一。
  EndIf
  NextobjFile
  
  注釋:在所有子目錄中循環,計數。
  SetobjSubdirs=objFolder.SubFolders
  ForEachobjLoopFolderInobjSubdirs
  CheckFolderobjLoopFolder.Path
  注釋:遞歸調用CheckFolder子過程,實現目錄樹的遍歷。
  NextobjLoopFolder
  
  SetobjSubdirs=Nothing
  SetobjFolder=Nothing
  
  EndSub
  
  
  為了簡化這段代碼,FileSystemObject對象和文件計數器都被定義為這個模塊的全局變量(因此前面都加了m_前綴)。CheckFolder子程序開始時用C:作為入口參數,一旦找到一個符合條件的文件,就把計數值加一。檢查完下面的所有文件後,再用其子目錄作為參數調用CheckFolder過程本身。當所有的目錄都被作為參數調用了之後,所有的文件也就被檢查完了。這就是用遞歸遍歷目錄樹的方法。所謂遞歸,就是過程直接或者間接的調用自身。最後,作為過程調用的結果,統計數字被Main過程顯示出來。
  
  只要把檢驗文件是否為GIF文件的部分換成其它的條件,再把計數的語句換成想要執行的語句塊。每當找到符合條件的語句後,就會執行這個語句塊。這樣就可以很容易的把代碼修改用於其它的用途。
  
  如果你曾今用過Dir函數來實現同樣的功能,那麼你一定會感到用對象編程的方便之處。不論你是想檢查文件屬性,還是創建新的文件,或者其它任何關於文件的操作,新的文件對象都會為你節省不少時間,而且是代碼更加易於理解。->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved