版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
VisualBasic程序設計(第二版)主編柳青嚴健武中國水利水電出版社第7章文件系統(tǒng)對象的使用FileSystemObject(簡稱FSO)是VB6.0新增加對計算機文件系統(tǒng)的訪問的對象。文件操作包括文件創(chuàng)建、刪除、復制、移動和讀寫文件內(nèi)容等,F(xiàn)SO對象包含了大部分文件(夾)操作的方法。本章內(nèi)容包括:(1)文件的復制、移動、刪除和讀寫;(2)文件夾的創(chuàng)建、復制、移動和刪除;(3)如何取得驅(qū)動器、文件和文件信息;(4)與文件操作相關控件的使用;(5)二進制文件的讀寫方法。7.1FSO對象的使用7.1.1FileSystemObject對象簡介FileSystemObject(FSO)對象模型是VB6.0新增加的基于對象的文件夾和文件操作工具,使用戶除使用傳統(tǒng)的VB語句和命令外,還可以使用具有屬性、方法和事件的object.method語法來操作文件夾和文件。FSO對象模型使應用程序能夠創(chuàng)建、復制、移動和刪除文件夾,或者檢測是否存在指定的文件或文件夾。FSO對象模型也可以獲取關于文件或文件夾的信息,如名稱、創(chuàng)建日期或最近修改日期等等。在工程中使用FSO對象之前,必須在菜單欄上選擇“工程→引用”選項,在彈出的“引用”對話框中選擇選項,如圖7-1所示。圖7-1“引用”對話框外部對象的使用與外部控件相似,可以認為引用的外部對象是沒有界面的外部控件。在工程中添加引用對象后,開發(fā)環(huán)境沒有任何的外觀改變。如果需要使用FSO對象提供的方法,必須先用代碼創(chuàng)建該對象。創(chuàng)建FSO對象的代碼:DimFsoAsNewFileSystemObject或:Setfso=CreateObject("Scripting.FileSystemObject")以上代碼均可創(chuàng)建Fso對象,VB中常用第1種寫法。FSO對象包含的子對象見表7-1。表7-1FSO對象包含了以下幾個子對象對象描述Drive允許收集關于系統(tǒng)所用的驅(qū)動器的信息,諸如驅(qū)動器有多少可用空間,其共享名稱是什么,等等。請注意,一個“驅(qū)動器”并不一定是一個硬盤。它可以是
CD-ROM驅(qū)動器、一個RAM盤等等。而且,驅(qū)動器不一定是和系統(tǒng)物理地連接;也可以通過一個
LAN進行邏輯地連接。Folder允許創(chuàng)建、刪除或移動文件夾,并向系統(tǒng)查詢文件夾的名稱、路徑等。Files允許創(chuàng)建、刪除或移動文件,并向系統(tǒng)查詢文件的名稱、路徑等。TextStream允許您讀和寫文本文件。7.1.2用FSO對象操作文件與文件夾[例7-1]文件與文件夾操作的演示案例。[分析]FSO對象包含幾個操作文件與文件的方法:1.文件復制CopyFile功能:把一個或多個文件從一個地方復制到另一個地方。語法格式:CopyFile
源文件,目標文件[,是否覆蓋]說明:將[源文件]復制為[目標文件],可選參數(shù)[,是否覆蓋]默認值得為True(即如果目標文件已存在,則覆蓋)。示例:DimFsoAsNewFileSystemObjectFso.CopyFile"C:\A.txt","D:\"'將C:\A.txt文件復制到D:\Fso.CopyFile"C:\A.txt","D:\B.txt"'將C:\A.txt文件復制到D:\,并改名為B.txtFso.CopyFile"C:\*.txt","D:\TEST\"'將C:\所有文本文件復制到D:\TEST文件夾2.移動文件MoveFile功能:將一個或多個文件從一個地方移動到另一個地方。語法格式:MoveFile
源文件,目標文件說明:將[源文件]復制到[目標文件],然后刪除[源文件]。注意:如果[源文件]包含通配符或[目標文件]以路徑分隔符(\)結尾,則認為[目標文件]指定了一個存在的文件夾,在此文件夾中移動相匹配的文件。否則,認為[目標文件]是一個要創(chuàng)建的目標文件名。以上任意一情況下移動一個文件時,可能出現(xiàn)三種情形:(1)如果[目標文件]不存在,文件得到移動。這是通常的情況。(2)如果[目標文件]是一個已存在文件,則發(fā)生一個“文件已存在”錯誤。(3)如果[目標文件]是一個存在的目錄(文件夾名),則發(fā)生一個“拒絕的權限”錯誤。示例:DimFsoAsNewFileSystemObjectFso.MoveFile“C:\A.txt”,“D:\”‘將C:\A.txt文件移動到D:\,如果D:\A.txt已經(jīng)存在,則出現(xiàn)錯誤提示。3.刪除文件DeleteFile功能:刪除一個指定的文件。語法格式:DeleteFile
文件位置及文件名[,是否強制刪除]說明:將指定的文件刪除,可選參數(shù)表示是否強制刪除文件。對于只讀文件,如果確定要刪除,將其設置為True,默認值為False。示例:Fso.DeleteFile"D:\A.txt",true'將C:\A.txt文件刪除,如果文件不存在,則出現(xiàn)“文件未找到”的錯誤。4判斷文件是否存在FileExists功能:執(zhí)行復制、移動和刪除等文件操作時,為避免運行錯誤,必須首先判斷源文件或目標文件是否存在。語法格式:FileExists(文件位置及文件名)說明:指定的文件是否存在,存在則為True,否則為False。示例:IfFso.FileExists("C:\A.txt")=TrueThen '執(zhí)行相關操作
……Endif5文件夾操作對文件夾的操作同樣也有復制、移動、刪除和判斷文件夾是否存在。功能和語法格式與操作文件相似。例如,復制、移動和刪除文件夾的方法分別為:CopyFolder、MoveFolder和DeleteFolder,操作前,也必須判斷文件夾是否存在FolderExists
。[建立工程]新建工程,按默認名稱保存工程為“工程1”,窗體名稱保存為Form1。構造用戶界面,在窗體中添加4個按鈕,如圖7-2所示。其中,1-Command1;2-Command2;3-Command3;4-Command4。圖7-2操作文件及文件夾的界面布局[程序代碼]DimFsoAsNewFileSystemObjectPrivateSubCommand1_Click()'判斷文件是否存在,存在則復制,否則提示
IfFso.FileExists("C:\A.txt")=TrueThen
Fso.CopyFile"C:\A.txt","D:\TEST\",TrueElse
MsgBox"沒有找到文件!"EndIfEndSubPrivateSubCommand2_Click()'判斷文件是否存在,存在則復制,否則提示
IfFso.FolderExists("C:\abc")=TrueThen
Fso.CopyFolder"C:\abc","D:\TEST\",TrueElse
MsgBox"沒有找到文件!"EndIfEndSubPrivateSubCommand3_Click()'判斷文件是否存在,存在則復制,否則提示
IfFso.FileExists("C:\A.txt")=TrueThenIfFso.FileExists("D:\test\A.txt")=FalseThen
Fso.MoveFile"C:\A.txt","D:\test\"
ElseIfMsgBox("文件已經(jīng)存在?替換嗎",vbQuestion+vbYesNo,"確認")=vbYes&_Then'先刪除,在移動
Fso.DeleteFile"d:\test\a.txt",True
Fso.MoveFile"C:\A.txt","D:\test\"EndIfEndIfElse
MsgBox"沒有找到文件!"EndIfEndSubPrivateSubCommand4_Click()IfFso.FolderExists("D:\test\Abc")=TrueThen
Fso.DeleteFolder"D:\test\ABC",TrueEndIfEndSub7.1.3文件對象(File)的使用[例7-2]取得選擇的文件相關信息并顯示在標簽(Label)上,運行結果如圖7-3所示。[分析]文件對象File可以取得與指定文件相關的一些信息,如文件大小、文件屬性、創(chuàng)建日期或修改日期等。圖7-3顯示文件信息文件對象File通過FSO對象的GetFile方法建立。本例演示了File對象的創(chuàng)建和使用。[建立工程]新建工程,按默認名稱保存工程為“工程1”,窗體名稱保存為Form1。構造用戶界面,在窗體上添加兩個Label控件,一個通用對話框控件和一個命令按鈕,采用默認名稱,界面布局如圖7-4所示。Label2Command1Label1CommonDialog1圖7-4界面布局[程序代碼]1 PrivateSubCommand1_Click()2 DimFsoAsNewFileSystemObject3 DimfAsFile'文件類型變量4 DimFileNameAsString,tmpStrAsString5 6 CommonDialog1.ShowOpen7 FileName=CommonDialog1.FileName8 9 IfFileName<>""Then10 tmpStr=tmpStr&"文件名是:"&Fso.GetFileName(FileName)&vbCrLf11 tmpStr=tmpStr&"文件擴展名是:"&Fso.GetExtensionName(FileName)&_
vbCrLf12 Setf=Fso.GetFile(FileName)'建立文件操作對象File13 14 tmpStr=tmpStr&"文件所在文件是:"&f.ParentFolder&vbCrLf15 tmpStr=tmpStr&"文件大小是:"&f.Size&"字節(jié)"&vbCrLf16 tmpStr=tmpStr&"文件建立日期:"&f.DateCreated&vbCrLf17 tmpStr=tmpStr&"文件修改日期:"&f.DateLastModified&vbCrLf18 tmpStr=tmpStr&"文件屬性:"&f.Attributes&vbCrLf19 20 Label2.Caption=tmpStr21 EndIf22 EndSub[代碼說明]行2:建立FSO對象Fso。行3:定義File變量,準備保存用Fso對象的方法創(chuàng)建的File對象。行6:打開選擇文件對話框。行7:暫時保存文件名及位置信息。行10:FSO對象的GetFileName方法,僅僅從位置中取得文件名,不包含文件位置。行11:FSO對象的GetExtensionName方法,可以取得文件名的擴展名。行12:FSO對象的GetFile方法,通過指定文件絕對位置,創(chuàng)建文件對象File。行14~18:文件相關屬性:ParentFolder屬性:取得文件所在的文件位置。Size屬性:取得文件大小,單位為字節(jié)Byte,其中:1KB=1024Byte;1MB=1024KB;1GB=1024MB。DateCreated屬性:文件創(chuàng)建日期。DateLastModified屬性:文件最后一次修改日期。Attributes屬性:文件屬性,可以設置或獲取。如常規(guī)、只讀、隱藏等,其值代表的含義見如表7-2。表7-2Attributes屬性值及含義常數(shù)值描述Normal0一般文件。未設置屬性。ReadOnly1只讀文件。屬性為讀/寫。Hidden2隱藏文件。屬性為讀/寫。System4系統(tǒng)文件。屬性為讀/寫。Volume8磁盤驅(qū)動器卷標。屬性為只讀。Directory16文件夾或目錄。屬性為只讀。Archive32自上次備份后已經(jīng)改變的文件。屬性為讀/寫。Alias64鏈接或快捷方式。屬性為只讀。Compressed128壓縮文件。屬性為只讀通過文件對象的幫助,可以查看其所有屬性和方法,如圖7-5所示。其中,f必須定義為File類型變量方可即時查看。圖7-5文件對象屬性和方法7.1.4文件夾對象(Folder)的使用[例7-4]列出C盤下面所有子文件夾,運行結果如圖7-6所示。圖7-6列出子文件夾[分析]與File對象創(chuàng)建和使用類似,通過文件夾對象Folder,也可以取得指定文件夾相關的一些信息,如文件夾大小、文件夾屬性、創(chuàng)建日期或修改日期,此外,還可以取得其子文件夾的信息,以及包含文件的信息。文件對象Folder是通過FSO對象的GetFolder方法建立的。下面的例子演示了GetFolder對象的創(chuàng)建和使用。[建立工程]新建工程,按默認名稱保存工程為“工程1”,窗體名稱保存為Form1。按圖7-6所示構造用戶界面,在窗體中添加一個ListBox列表框控件框和一個按鈕控件,所有控件名稱采用默認。[程序代碼]1 DimfsoAsNewFileSystemObject3 PrivateSubCommand1_Click()4 DimfdAsFolder,sfdAsFolder6 Setfd=fso.GetFolder("c:\")7 8 List1.Clear9 List1.AddItemfd.Name&"包含的子文件夾個數(shù)為:"&fd.SubFolders.Count10 ForEachsfdInfd.SubFolders11 List1.AddItemsfd.Path12 Next13 EndSub[代碼說明]行1:創(chuàng)建FSO對象Fso。行4:fd為文件夾類型變量,準備保存使用FSO方法GetFolder建立的文件夾對象,Sfd準備保存子文件夾對象。注意:子文件夾也是文件夾Folder類型。行6:建立文件夾Folder對象。行9:SubFolders為文件夾的子文件集合對象,相當于數(shù)組。行10~12:使用列舉循環(huán),依次取得每個子文件夾。Path為文件夾的位置屬性,Name為文件夾名稱屬性(不包含位置);[例7-5]列出C:\所有的文件,運行結果如圖7-7所示。圖7-7列出所有文件[建立工程]新建工程,按默認名稱保存工程為“工程1”,窗體名稱保存為Form1。按圖7-7所示構造用戶界面,在窗體中添加一個ListBox列表框控件框和一個按鈕控件,所有控件名稱采用默認。[程序代碼]1 PrivateSubCommand1_Click()2 DimfdAsFolder,fAsFile3 Setfd=fso.GetFolder("c:\")4 List1.AddItemfd.Name&"包含的子文件個數(shù)為:"&fd.Files.Count5 6 ForEachfInfd.Files7 List1.AddItemf.Path8 Next9 EndSub[代碼說明]本例中的Files是文件夾中所有文件的集合對象,文件對象中的Path屬性包含文件的位置及文件名。代碼其他行含義與例7-5相似,不再贅述。[例7-6]
列舉出C:\ABC文件夾中每一子文件夾的文件信息。新建工程,按默認名稱保存工程為“工程1”,窗體名稱保存為Form1。界面布局如例7-4和例7-5相同,運行結果如圖7-8所示。本例代碼請讀者自行分析。圖7-8列舉每一子文件夾文件[程序代碼]PrivateSubCommand1_Click()DimfdAsFolderIffso.FolderExists("C:\ABC")ThenSetfd=fso.GetFolder("C:\ABC")
ListFile
fdEndIfEndSubSubListFile(fdAsFolder)ForEachfInfd.FilesList1.AddItemf.PathNextDimsfdAsFolderForEachsfdInfd.SubFolders
ListFile
sfdNextEndSub[總結與提高]例7-4和例7-5只實現(xiàn)了列舉文件夾中第1層子文件夾內(nèi)容和文件內(nèi)容,如果要列舉每一個子文件夾的內(nèi)容和文件內(nèi)容,需要使用遞歸循環(huán)實現(xiàn)。例7-6演示了列舉文件夾中子文件夾內(nèi)容,以及子文件夾中的每一個子文件的文件內(nèi)容。7.2.5文本文件讀寫(TextStream)對象的使用[例7-7]將文本框Text1的錄入的數(shù)據(jù)保存到C:\test.txt。如果文件已存在,則將數(shù)據(jù)添加到文件末尾,如果不存在,則創(chuàng)建新文件。[分析]FSO的子對象TextStream對象用于讀寫順序的文本文件。一般讀/寫文本文件的步驟是:打開文件;讀/寫文件內(nèi)容;關閉文件??梢杂肍SO提供的OpenTextFile方法來創(chuàng)建TextStream對象。OpenTextFile方法的語法格式:OpenTextFile(文件名[,讀寫方式[,是否建立]])說明:打開一個指定的文件并返回一個TextStream
對象,該對象可用于對文件進行讀操作或追加操作。其中:[文件名]:指定需要操作的文本文件。[讀寫方式]:可以是ForAppending(添加數(shù)據(jù)到已存在文件的末尾);ForWriting(新建文件并準備添加數(shù)據(jù),如果文件存在,則覆蓋);ForReading(只讀方式,以該方式打開的文件只能讀,不能寫)。[是否建立]:如果讀寫方式為ForWriting,若打開的文件不存在,則新建文件;若存在,暫且覆蓋原來內(nèi)容;如果讀寫方式為ForAppending,則在文件不存在時新建文件。要把數(shù)據(jù)保存到文件,可以使用TextStream對象的WriteLine方法寫入內(nèi)容;使用WriteBlankLines(x)寫入X行空行(換行)。[建立工程]新建工程,按默認名稱保存工程為“工程1”,窗體名稱保存為Form1。按圖7-9所示構造用戶界面。多行文本框,帶水平和垂直滾動條Text1Command1圖7-9界面布局[程序代碼]1 DimfsAsNewFileSystemObject2 PrivateSubCommand1_Click()3 IfText1.Text=""ThenExitSub4 DimtxtAsTextStream5 Iffs.FileExists("c:\test.txt")=TrueThen6 '如果文件存在,則以添加方式保存內(nèi)容7 Settxt=fs.OpenTextFile("c:\test.txt",ForAppending)8 Else9 '如果文件不存在,則新建文件10 Settxt=fs.OpenTextFile("c:\test.txt",ForWriting,True)11 EndIf12 13 txt.WriteLineText1.Text14 txt.Close15 EndSub[代碼說明]行4:定義TextStream變量,準備保存創(chuàng)建的TextStream對象。行7:如果文件存在,則以添加方式打開文件。OpenTextFile方法打開文件后,將返回TextStream對象。通過TextStream對象txt的WriteLine方法,將所有數(shù)據(jù)作為文件中的一行寫入。行10:如果文件不存在,則以新建文件的方式打開文件。注意:如果無論文件是否存在都要重新建立,則不需要判斷文件是否存在,直接使用本行代碼即可。[總結與提高]以下代碼說明如何從文件中讀出一行數(shù)據(jù):DimtxtAsTextStreamIffs.FileExists("c:\test.txt")=TrueThenSettxt=fs.OpenTextFile("c:\test.txt",ForReading)Text1.Text=txt.ReadAll
txt.CloseEndIf注意:打開文件時,使用ForReading方式。ReadAll是一次性讀出文件所有的內(nèi)容。如果需要一行行讀出數(shù)據(jù),可以將代碼修改為:DimtxtAsTextStreamDimstrAsStringIffs.FileExists("c:\test.txt")=TrueThenSettxt=fs.OpenTextFile("c:\test.txt",ForReading)
WhileNottxt.AtEndOfLine
str=str&txt.ReadLine&vbCrLfWend
txt.Close
MsgBox"文件的內(nèi)容為:"&strEndIf[代碼說明]TextStream對象的ReadLine方法是每次讀文件中的一行數(shù)據(jù),再次讀取時將自動移動到下一行準備讀,AtEndOfLine屬性判斷是否文件所有的行已經(jīng)讀取完畢。7.1.6獲取驅(qū)動器信息[例7-8]將本機驅(qū)動器列表添加到Combo組合框。選擇對應驅(qū)動器時,如果是硬盤分區(qū),則列出分區(qū)的總空間大小、有效空間大小,運行界面如圖7-10所示。圖7-10運行界面[分析]可以用FSO對象的Drives集合對象得到本機所有的驅(qū)動器列表,然后用FSO的GetDrive方法得到每一個驅(qū)動器的具體Drive對象,從而得到驅(qū)動器的信息,例如判斷是否是光盤、移動磁盤、或硬盤盤符等。Drive對象允許獲得一個系統(tǒng)的各個驅(qū)動器的信息,這些驅(qū)動器可以是物理的,也可以是位于網(wǎng)絡上的。通過該對象的屬性可以獲得下列信息:以字節(jié)表示的驅(qū)動器總空間(TotalSize
屬性)。以字節(jié)表示的驅(qū)動器可用空間(AvailableSpace
或FreeSpace
屬性)。給驅(qū)動器指定的字母號(DriveLetter
屬性)。驅(qū)動器類型,諸如可移動的、固定的、網(wǎng)絡、CD-ROM、或者RAM盤(DriveType
屬性)。驅(qū)動器序列號(SerialNumber
屬性)。驅(qū)動器使用的文件系統(tǒng)類型,諸如FAT、FAT32、NTFS等(FileSystem
屬性)。驅(qū)動器是否可用(IsReady
屬性)。共享和/或卷標的名稱(ShareName
和VolumeName
屬性)。驅(qū)動器的路徑或根文件夾(Path和RootFolder
屬性)。[建立工程]新建工程,按默認名稱保存工程為“工程1”,窗體名稱保存為Form1。按圖7-10所示構造用戶界面。在窗體上添加組框控件Combo1,設置其Style屬性為2-DropDownList;添加標簽控件Label1,設置其BorderStyle屬性為1-FixedSingle。[程序代碼]1 DimfsAsNewFileSystemObject2 PrivateSubForm_Load()3 DimdrAsDrive4 ForEachdrInfs.Drives5 Combo1.AddItemdr.DriveLetter6 Next7 IfCombo1.ListCount>0ThenCombo1.ListIndex=08 EndSub9 PrivateSubCombo1_Click()10 DimdrAsDrive11 DimInfoAsString12 Setdr=fs.GetDrive(Combo1.Text)13 14 Ifdr.DriveType=FixedThen15 Info=Info&"總空間大小:"&dr.TotalSize&"字節(jié)"&vbCrLf16 Info=Info&"有效空間大小:"&dr.AvailableSpace&"字節(jié)"&vbCrLf17 Info=Info&"名稱:"&dr.VolumeName&vbCrLf18 EndIf19 Label1.Caption=Info20 EndSub[代碼說明]行3:定義dr為Drive類型變量,準備在列舉過程中保存具體的驅(qū)動器Drive對象。行4~6:FSO的Drives屬性包含本機所有驅(qū)動器對象,Drive對象的DriveLetter屬性代表驅(qū)動器盤符的首字母,將盤符首字母添加到組合框。行7:設置組合框當前選擇的項為第1項,同時觸發(fā)其Click事件。行12:通過FSO的方法GetDrive,建立驅(qū)動器對象。行14:DriveType屬性代表驅(qū)動器類型。其值可能是:0-UnknownType;1-Removable;2-Fixed;3-Network;4-CD-ROM;5-RAMDisk。行15~17:取得驅(qū)動器屬性值。7.2文件系統(tǒng)控件的使用7.2.1系統(tǒng)提供的文件系統(tǒng)控件應用程序的驅(qū)動器、目錄和文件操作信息既可以用CommonDialog提供的標準對話框,也可以用VisualBasic6.0提供的文件系統(tǒng)控件組合創(chuàng)建自定義對話框。這些控件包括驅(qū)動器列表框控件(DriveListBox)、目錄列表框控件(DirListBox)、文件列表框控件(FileListBox),這三個文件系統(tǒng)控件能夠自動地從操作系統(tǒng)中獲取一些信息,應用程序可以訪問這些信息,或通過控件屬性獲取各控件的信息。1.驅(qū)動器列表框驅(qū)動器列表框是一個下拉式的列表框,默認狀態(tài)下顯示當前驅(qū)動器名。程序運行時,該控件獲得焦點(光標移入該控件)時,可輸入任何有效的驅(qū)動器標識符,或者單擊右側的下拉箭頭選擇列表框中的驅(qū)動器標識符。單擊箭頭可下拉列表框以列舉所有的有效驅(qū)動器。若從中選定新驅(qū)動器,該驅(qū)動器將出現(xiàn)在列表框的頂端??梢酝ㄟ^檢查Drive屬性判斷當前選擇的驅(qū)動器。應用程序也可簡單的賦值語句來指定出現(xiàn)在列表框頂端的驅(qū)動器,即:Drive1.Drive=“c:\”。驅(qū)動器列表框顯示可用的有效驅(qū)動器。從列表框中選擇驅(qū)動器不能自動地改變當前的工作驅(qū)動器;但可用Drive屬性在操作系統(tǒng)級改變驅(qū)動器,方法:將Drive屬性作為ChDrive
語句的參數(shù),即:ChDriveDrive1.Drive。在驅(qū)動器列表框中選擇新的驅(qū)動器后,將觸發(fā)一個Change事件。2.目錄列表框目錄列表框可以顯示指定驅(qū)動器上的目錄結構,一般從根目錄開始顯示用戶系統(tǒng)的當前驅(qū)動器目錄結構。當前目錄名被突出顯示(默認),而且顯示的目錄是按目錄層次依次縮進。在目錄列表框中,當前目錄下的子目錄也縮進顯示。在列表框中上、下移動時,將依次突出顯示每個目錄項,如圖7-11所示。圖7-11目錄列表框中顯示的目錄結構(1)標識單個目錄。列表框中的每個目錄關聯(lián)(對應)一個整型標識符ListIndex(列表索引值),可以用來標識單個目錄。Path屬性(Dir1.Path)指定目錄(當前目錄)的ListIndex
值為-1;緊鄰其上目錄的ListIndex
值為–2;再上一級目錄的ListIndex為–3;依此類推。Dir1.Path的下一級子目錄(當前目錄的下一級目錄)的ListIndex值為0。若其下一級子目錄有多個目錄,則每個目錄的ListIndex
值按1、2、3...的順序依次排列,如圖7-11所示。CommonDialog
控件中提供這方面的功能。(2)設置當前目錄。用目錄列表框的Path屬性可以設置或顯示列表框的當前目錄(ListIndex=-1)。例如,若將目錄列表框Dir1的Path屬性直接賦值“c:\Programfile\MicrosoftVisualStudio\Vb98\Template\Classes”,則該目錄成為當前目錄。將驅(qū)動器列表框Drive1的Drive屬性值賦給目錄列表框的Path屬性,可將驅(qū)動器列表框中指定驅(qū)動器中的當前目錄顯示出來。執(zhí)行賦值語句時,目錄列表框?qū)@示該驅(qū)動器上所有有效的目錄和子目錄。缺省時,目錄列表框?qū)@示驅(qū)動器當前目錄的所有上級目錄以及下一級子目錄,而驅(qū)動器是被指定給Dir1.Path屬性的。目錄列表框并不在操作系統(tǒng)級設置當前目錄;只是突出顯示當前目錄并將其ListIndex
值設置為-1。設置當前工作目錄應使用ChDir語句。例如,以下語句可將當前目錄變?yōu)槟夸浟斜砜蛑械囊粋€目錄:ChDirDir1.Path。在使用文件控件的應用程序中,可用Application對象將當前目錄設置為應用程序的可執(zhí)行(.exe)文件所在目錄,即:ChDrive
App.Path '設置驅(qū)動器。ChDir
App.Path'設置目錄。(3)單擊目錄項目。單擊目錄列表框中某個項目時,將突出顯示該項目。雙擊某個項目時,則把它賦予Path屬性并把其ListIndex
屬性設置為-1,然后重繪目錄列表框以顯示直接相鄰的下級子目錄。(4)查找目錄的相對位置。ListCount
屬性返回當前擴展目錄下的目錄數(shù)目,而不是目錄列表框中的目錄總數(shù)。因為當前擴展目錄的ListIndex
值總為-1,所以可以編程來判斷在目錄層次結構中,當前展開目錄與根目錄有多大距離。3.文件列表框程序運行時,文件列表框顯示由Path屬性指定的包含在目錄中的文件??梢杂靡韵抡Z句在當前驅(qū)動器上顯示當前目錄中的所有文件:File1.Path=Dir1.Path然后,可設置Pattern屬性顯示這些文件的子集。例如,設置*.frm
后,將只顯示擴展名為frm的文件。Pattern屬性也接受由分號分隔的列表。例如,以下程序代碼將顯示所有擴展名為.frm
和.bas的文件:File1.Pattern="*.frm;*.bas"VisualBasic也支持通配符“?”。例如,???.txt將顯示所有文件主名包含三個字符且擴展名為.txt的文件。文件列表框的屬性也提供當前選定文件的屬性(Archive、Normal、System、Hidden和ReadOnly)。可以在文件列表框中用這些屬性指定要顯示的文件類型。System和Hidden屬性的默認值為False。Normal、Archive和ReadOnly
屬性的默認值為True。Normal=True時,將顯示無System或Hidden屬性的文件。當Normal=False時,仍然可顯示具有ReadOnly或Archive屬性的文件,方法是將這兩個屬性設置為True。4.使用文件系統(tǒng)的控件組合將文件系統(tǒng)控件進行組合,可同步顯示驅(qū)動器、目錄和文件的信息。對于驅(qū)動器列表框(Drive1)、目錄列表框(Dir1)和文件列表框(File1),可以下步驟建立控件組合:(1)建立Drive1_Change事件,更新Drive1的顯示以反映新選定的驅(qū)動器。即將新選定項目的(Drive1.Drive屬性)賦予Dir1列表框的Path屬性,程序代碼如下:PrivateSubDrive1_Change()Dir1.Path=Drive1.DriveEndSub(2)在Dir1_Change事件中更新Dir1的顯示以反映新驅(qū)動器的當前目錄。即將新路徑(Dir1.Path屬性)賦予File1列表框的File1.Path屬性,程序代碼如下:PrivateSubDir1_Change()File1.Path=Dir1.PathEndSub(3)File1.Path屬性賦值語句更新File1列表框中的顯示,以反映Dir1控件中的指定的路徑。單擊驅(qū)動器列表框中的項目將觸發(fā)Change事件。此外,當用戶選定項目并改變窗體上的焦點時,也將觸發(fā)Change事件。7.2.2文件系統(tǒng)控件應用[例7-9]使用驅(qū)動器控件,制作如圖7-12所示的文件選擇對話框.。Dir1File1Dirve1圖7-12自定義打開文件對話框[分析]通常,驅(qū)動器列表框控件、目錄列表框控件和文件列表框控件一起使用,以查看驅(qū)動器、目錄和文件,其中的一些特殊屬性和事件使它們相互聯(lián)系起來,可以用多種方法混合、匹配文件系統(tǒng)控件,使文件操作十分靈活,這是CommonDialog控件無法做到的。但是,CommonDialog控件使用簡單方便,若只需要標準的“打開文件”或“保存”對話框,用CommonDialog控件即可滿足要求。本例簡單介紹文件系統(tǒng)控件的應用。[建立工程]新建工程,按默認名稱保存工程為“工程1”,窗體名稱保存為Form1。界面布局:為使界面整齊美觀,首先在窗體添加一個框架控件Frame1,然后將Drive、Dir和File控件從“工具箱”中添加到Frame1內(nèi)。調(diào)整布局如圖7-12所示。[程序代碼]1 PrivateSubForm_Load()2 File1.Pattern="*.*"3 Drive1.Drive="c:\"4 Dir1.Path=Drive1.Drive5 Text1.Text=""6 EndSub7 8 PrivateSubDrive1_Change()9 Dir1.Path=Drive1.Drive10 EndSub11 12 PrivateSubDir1_Change()13 File1.Path=Dir1.Path14 EndSub15 16 PrivateSubFile1_Click()17 IfFile1.ListCount>0Then18 Text1.Text=File1.Path&"\"&File1.FileName19 Text1.Text=Replace(Text1.Text,"\\","\")'20 EndIf21 EndSub[代碼說明]行2:設置文件對話框顯示的文件類型顯示所有的文件類型。如僅顯示txt、Word和Excel文件,可以設置為:File1.Pattern=""*.txt;*.doc;*.xls"",每種類型之間用分號分隔。行3:設置首選驅(qū)動器分區(qū)為C。行4:設置首選目錄為C根目錄。實際上,程序執(zhí)行到行3時已觸發(fā)Drive1的Change事件(行8~10),而Drive1的Change事件中已設置File1.Path屬性,本行是多余的。行8~9:每次改變驅(qū)動器時,將當前驅(qū)動器根目錄作為Dir欲顯示的目錄。該段代碼將觸發(fā)Dir的Change事件。因此,將同時執(zhí)行行12~13的代碼,設置File1控件顯示Dir1.Path中指定目錄下的文件。行12~13:根據(jù)File1的Pattern屬性設置,顯示指定目錄下的滿足篩選類型條件的文件。行18:獲取選擇文件的位置和文件名。行19:如果是根目錄下的文件,按照行18的組合,將多一個“\”符號。因此,替換兩個“\\”為一個,以滿足路徑描述格式規(guī)則,如“C:\A.txt”;如不經(jīng)過替換,文本將得到“c:\\A.txt”。7.3典型例題[例7-10]一個簡單的文字處理軟件設計實例[分析]本例是一個簡單的文字處理軟件,該軟件實現(xiàn)了文本輸入、文本編輯、整體文本格式及顏色設置、保存及打文件等功能,處理的文件后綴定義為“.MyTxt”。文件除保存文本外,也保存了文本的字體格式信息。[建立工程]1.新建工程,按默認名稱保存工程為“工程1”,窗體名稱保存為Form1。2.設計程序界面,如圖7-17所示。圖7-17
程序界面包括主窗體、下拉式主菜單、工具欄、文本編輯框等部分。(1)主窗體:采用默認設置,窗體名稱為:Form1(2)菜單:各菜單及子菜單名稱及對應快捷鍵見表7-12。表7-12菜單及子菜單名稱及對應快捷鍵層次顯示文字名稱熱鍵快捷鍵1文件nmuFileF(NULL)2新鍵nmuNewNCtrl+N打開nmuOpenOCtrl+O保存nmuSaveSCtrl+S另存為nmuSaveAsA(NULL)退出nmuExitx(NULL)1編輯nmuEditE(NULL)2剪切nmuCutXCtrl+X復制nmuCopyCCtrl+C粘貼nmuPastePCtrl+V1格式nmuFormatO(NULL)2字體nmuFontF(NULL)顏色nmuColorC(NULL)1幫助nmuHelpH(NULL)2關于MytText1.0nmuAboutA(NULL)(3)工具欄對象名稱:ToolBar1。對應菜單的設置,分為九組,分別對應“新建”、“打開”、“保存”、“剪切”、“復制”、“粘貼”、“字體”、“顏色”、“幫助”菜單項,對應關鍵字(Key)按順序為:bNew、bOpen、bSave、bCut、bCopy、bPaste、bFont、bColor、bHelp。(4)文本編輯框:多行文本框,且有垂直滾動條,默認情況下顯示空文本,對象名為Text1。3.屬性設置:Text1.Text=””Text1.MutiLine=TrueText1.ScrollBars=2[程序代碼](1)聲明全局變量:DimCurrentFileNameAsString‘聲名字符串變量用于保存當前操作文件的文件名DimbTextChangeAsBoolean‘聲明布爾類型變量用于標識文本內(nèi)容是否改變(2)在窗口Form的事件Load中初始化全局變量:PrivateSubForm_Load()bTextChange=FalsebTextChange=“”EndSub(3)編寫相應的事件過程:PublicSubFileOpen()‘打開文件
DimTextStrAsStringCommonDialog1.ShowOpen‘顯示打開文件對話框
CurrentFileName=CommonDialog1.FileName‘獲取文件名作為當前操作文件名
IfCurrentFileName<>""Then‘判斷文件是否存在
FileNo=FreeFile‘取得可用文件號
OpenCurrentFileNameForInputAsFileNo‘打開文件
Input#FileNo,TextStr,vFontBold,vFontName,vFontSize,vFontItalic,vFontUnderline,vFontStrikethru,vColor‘讀取文件內(nèi)容,TextStr為文本內(nèi)容,后邊為字體粗細、字體名稱、大小等字體格式信息。
CloseFileNo‘關閉文件
Text1.Font.Bold=vFontBold‘按文件保存文本的字體格式在文本編輯框中顯示文件內(nèi)容
Text1.Font.Name=vFontNameText1.Font.Size=vFontSizeText1.Font.Italic=vFontItalicText1.Font.Underline=vFontUnderlineText1.FontStrikethru=vFontStrikethruText1.ForeColor=vColorText1.Text=TextStr
vTextChange=False‘文本未改變
EndIfEndSubPublicSubFileNew()‘新建文件
IfbTextChangeThen‘次保存后文本內(nèi)容是否改變,如改變則顯示是否保存提示
SaveOrNot=MsgBox("文件"+CurrentFileName+"沒有保存,是否保存?",3,"注意!!")SelectCaseSaveOrNotCasevbNoText1.Text=“”
CurrentFileName=“”CasevbYes
FileSaveText1.Text=“”
CurrentFileName=“EndSelectElsePublicSubFileSave()‘保存文件
FileNo=FreeFile‘取得可用文件號
IfCurrentFileName<>""ThenOpenCurrentFileNameForOutputAsFileNo‘打開文件
Write#FileNo,Text1.Text,Text1.Font.Bold,Text1.Font.Name,Text1.Font.Size,Text1.Font.Italic,Text1.Font.Underline,Text1.FontStrikethru,Text1.ForeColor‘保存文件
CloseFileNo
BTextChange=False‘文件已保存,設置未改變標識
EndIfEndIfEndSubPublicSubFileSaveAs()‘文件另存為
CommonDialog1.ShowSave‘顯示“打開“對話框
CurrentFileName=CommonDialog1.FileName‘獲取指定文件為當前文件名
FileSave‘保存文件EndSubPublicSubSetFont()‘設置字體格式
CommonDialog1.Flags=3‘加載字體
CommonDialog1.ShowFont‘顯示“字體“對話框
Text1.Font.Bold=CommonDialog1.FontBold‘設置字體粗細
Text1.Font.Name=CommonDialog1.FontName‘設置字體名稱
Text1.Font.Size=CommonDialog1.FontSize‘設置字體大小
Text1.Font.Italic=CommonDialog1.FontItalic‘設置是否為斜體
Text1.Font.Underline=CommonDialog1.FontUnderli
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 口腔勞動合同范例
- 掛畫購買合同范例
- 2024至2030年橢圓齒輪流量計項目投資價值分析報告
- 2024至2030年抗雙鏈DNA抗體項目投資價值分析報告
- 陜西青年職業(yè)學院《光電專業(yè)學科前沿》2023-2024學年第一學期期末試卷
- 2024年齒啃式粉碎機項目可行性研究報告
- 2024年蕎麥燒酒項目可行性研究報告
- 注塑加工合同范例格式
- 2024事業(yè)單位合同管理制度與內(nèi)部審計合同規(guī)范范文2篇
- 2024年度危險品貨物運輸安全協(xié)議范本3篇
- 2024年軍隊文職(管理學)考前通關知識點必練題庫(含真題)
- 2024年紹興市特種設備檢測院招考(6人)高頻難、易錯點500題模擬試題附帶答案詳解
- 環(huán)境影響評價技術指南
- 尋找“紅衣姐”(2022年河北中考語文試卷記敘文閱讀題及答案)
- 法社會學教程(第三版)教學
- 醫(yī)學課件疼痛的護理
- 《26. 詩詞五首-赤壁》 課件 課件-2024-2025學年八年級語文上冊 (統(tǒng)編版)
- 期末檢測卷(試題)-2024-2025學年人教PEP版英語六年級上冊
- 充電站建設方案書-圖文
- 2024三年級英語下冊閱讀理解課件人教精通版三起
- 2023九年級數(shù)學下冊 第三章 圓7 切線長定理教案 (新版)北師大版
評論
0/150
提交評論