文件系統(tǒng)對(duì)象的使用_第1頁
文件系統(tǒng)對(duì)象的使用_第2頁
文件系統(tǒng)對(duì)象的使用_第3頁
文件系統(tǒng)對(duì)象的使用_第4頁
文件系統(tǒng)對(duì)象的使用_第5頁
已閱讀5頁,還剩38頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

VisualBasic程序設(shè)計(jì)(第二版)主編柳青嚴(yán)健武中國水利水電出版社第7章文件系統(tǒng)對(duì)象的使用FileSystemObject(簡(jiǎn)稱FSO)是VB6.0新增加對(duì)計(jì)算機(jī)文件系統(tǒng)的訪問的對(duì)象。文件操作包括文件創(chuàng)建、刪除、復(fù)制、移動(dòng)和讀寫文件內(nèi)容等,F(xiàn)SO對(duì)象包含了大部分文件(夾)操作的方法。本章內(nèi)容包括:(1)文件的復(fù)制、移動(dòng)、刪除和讀寫;(2)文件夾的創(chuàng)建、復(fù)制、移動(dòng)和刪除;(3)如何取得驅(qū)動(dòng)器、文件和文件信息;(4)與文件操作相關(guān)控件的使用;(5)二進(jìn)制文件的讀寫方法。7.1FSO對(duì)象的使用7.1.1FileSystemObject對(duì)象簡(jiǎn)介FileSystemObject(FSO)對(duì)象模型是VB6.0新增加的基于對(duì)象的文件夾和文件操作工具,使用戶除使用傳統(tǒng)的VB語句和命令外,還可以使用具有屬性、方法和事件的object.method語法來操作文件夾和文件。FSO對(duì)象模型使應(yīng)用程序能夠創(chuàng)建、復(fù)制、移動(dòng)和刪除文件夾,或者檢測(cè)是否存在指定的文件或文件夾。FSO對(duì)象模型也可以獲取關(guān)于文件或文件夾的信息,如名稱、創(chuàng)建日期或最近修改日期等等。在工程中使用FSO對(duì)象之前,必須在菜單欄上選擇“工程→引用”選項(xiàng),在彈出的“引用”對(duì)話框中選擇選項(xiàng),如圖7-1所示。圖7-1“引用”對(duì)話框外部對(duì)象的使用與外部控件相似,可以認(rèn)為引用的外部對(duì)象是沒有界面的外部控件。在工程中添加引用對(duì)象后,開發(fā)環(huán)境沒有任何的外觀改變。如果需要使用FSO對(duì)象提供的方法,必須先用代碼創(chuàng)建該對(duì)象。創(chuàng)建FSO對(duì)象的代碼:DimFsoAsNewFileSystemObject或:Setfso=CreateObject("Scripting.FileSystemObject")以上代碼均可創(chuàng)建Fso對(duì)象,VB中常用第1種寫法。FSO對(duì)象包含的子對(duì)象見表7-1。表7-1FSO對(duì)象包含了以下幾個(gè)子對(duì)象對(duì)象描述Drive允許收集關(guān)于系統(tǒng)所用的驅(qū)動(dòng)器的信息,諸如驅(qū)動(dòng)器有多少可用空間,其共享名稱是什么,等等。請(qǐng)注意,一個(gè)“驅(qū)動(dòng)器”并不一定是一個(gè)硬盤。它可以是

CD-ROM驅(qū)動(dòng)器、一個(gè)RAM盤等等。而且,驅(qū)動(dòng)器不一定是和系統(tǒng)物理地連接;也可以通過一個(gè)

LAN進(jìn)行邏輯地連接。Folder允許創(chuàng)建、刪除或移動(dòng)文件夾,并向系統(tǒng)查詢文件夾的名稱、路徑等。Files允許創(chuàng)建、刪除或移動(dòng)文件,并向系統(tǒng)查詢文件的名稱、路徑等。TextStream允許您讀和寫文本文件。7.1.2用FSO對(duì)象操作文件與文件夾[例7-1]文件與文件夾操作的演示案例。[分析]FSO對(duì)象包含幾個(gè)操作文件與文件的方法:1.文件復(fù)制CopyFile功能:把一個(gè)或多個(gè)文件從一個(gè)地方復(fù)制到另一個(gè)地方。語法格式:CopyFile

源文件,目標(biāo)文件[,是否覆蓋]說明:將[源文件]復(fù)制為[目標(biāo)文件],可選參數(shù)[,是否覆蓋]默認(rèn)值得為True(即如果目標(biāo)文件已存在,則覆蓋)。示例:DimFsoAsNewFileSystemObjectFso.CopyFile"C:\A.txt","D:\"'將C:\A.txt文件復(fù)制到D:\Fso.CopyFile"C:\A.txt","D:\B.txt"'將C:\A.txt文件復(fù)制到D:\,并改名為B.txtFso.CopyFile"C:\*.txt","D:\TEST\"'將C:\所有文本文件復(fù)制到D:\TEST文件夾2.移動(dòng)文件MoveFile功能:將一個(gè)或多個(gè)文件從一個(gè)地方移動(dòng)到另一個(gè)地方。語法格式:MoveFile

源文件,目標(biāo)文件說明:將[源文件]復(fù)制到[目標(biāo)文件],然后刪除[源文件]。注意:如果[源文件]包含通配符或[目標(biāo)文件]以路徑分隔符(\)結(jié)尾,則認(rèn)為[目標(biāo)文件]指定了一個(gè)存在的文件夾,在此文件夾中移動(dòng)相匹配的文件。否則,認(rèn)為[目標(biāo)文件]是一個(gè)要?jiǎng)?chuàng)建的目標(biāo)文件名。以上任意一情況下移動(dòng)一個(gè)文件時(shí),可能出現(xiàn)三種情形:(1)如果[目標(biāo)文件]不存在,文件得到移動(dòng)。這是通常的情況。(2)如果[目標(biāo)文件]是一個(gè)已存在文件,則發(fā)生一個(gè)“文件已存在”錯(cuò)誤。(3)如果[目標(biāo)文件]是一個(gè)存在的目錄(文件夾名),則發(fā)生一個(gè)“拒絕的權(quán)限”錯(cuò)誤。示例:DimFsoAsNewFileSystemObjectFso.MoveFile“C:\A.txt”,“D:\”‘將C:\A.txt文件移動(dòng)到D:\,如果D:\A.txt已經(jīng)存在,則出現(xiàn)錯(cuò)誤提示。3.刪除文件DeleteFile功能:刪除一個(gè)指定的文件。語法格式:DeleteFile

文件位置及文件名[,是否強(qiáng)制刪除]說明:將指定的文件刪除,可選參數(shù)表示是否強(qiáng)制刪除文件。對(duì)于只讀文件,如果確定要?jiǎng)h除,將其設(shè)置為True,默認(rèn)值為False。示例:Fso.DeleteFile"D:\A.txt",true'將C:\A.txt文件刪除,如果文件不存在,則出現(xiàn)“文件未找到”的錯(cuò)誤。4判斷文件是否存在FileExists功能:執(zhí)行復(fù)制、移動(dòng)和刪除等文件操作時(shí),為避免運(yùn)行錯(cuò)誤,必須首先判斷源文件或目標(biāo)文件是否存在。語法格式:FileExists(文件位置及文件名)說明:指定的文件是否存在,存在則為True,否則為False。示例:IfFso.FileExists("C:\A.txt")=TrueThen '執(zhí)行相關(guān)操作

……Endif5文件夾操作對(duì)文件夾的操作同樣也有復(fù)制、移動(dòng)、刪除和判斷文件夾是否存在。功能和語法格式與操作文件相似。例如,復(fù)制、移動(dòng)和刪除文件夾的方法分別為:CopyFolder、MoveFolder和DeleteFolder,操作前,也必須判斷文件夾是否存在FolderExists

。[建立工程]新建工程,按默認(rèn)名稱保存工程為“工程1”,窗體名稱保存為Form1。構(gòu)造用戶界面,在窗體中添加4個(gè)按鈕,如圖7-2所示。其中,1-Command1;2-Command2;3-Command3;4-Command4。圖7-2操作文件及文件夾的界面布局[程序代碼]DimFsoAsNewFileSystemObjectPrivateSubCommand1_Click()'判斷文件是否存在,存在則復(fù)制,否則提示

IfFso.FileExists("C:\A.txt")=TrueThen

Fso.CopyFile"C:\A.txt","D:\TEST\",TrueElse

MsgBox"沒有找到文件!"EndIfEndSubPrivateSubCommand2_Click()'判斷文件是否存在,存在則復(fù)制,否則提示

IfFso.FolderExists("C:\abc")=TrueThen

Fso.CopyFolder"C:\abc","D:\TEST\",TrueElse

MsgBox"沒有找到文件!"EndIfEndSubPrivateSubCommand3_Click()'判斷文件是否存在,存在則復(fù)制,否則提示

IfFso.FileExists("C:\A.txt")=TrueThenIfFso.FileExists("D:\test\A.txt")=FalseThen

Fso.MoveFile"C:\A.txt","D:\test\"

ElseIfMsgBox("文件已經(jīng)存在?替換嗎",vbQuestion+vbYesNo,"確認(rèn)")=vbYes&_Then'先刪除,在移動(dòng)

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文件對(duì)象(File)的使用[例7-2]取得選擇的文件相關(guān)信息并顯示在標(biāo)簽(Label)上,運(yùn)行結(jié)果如圖7-3所示。[分析]文件對(duì)象File可以取得與指定文件相關(guān)的一些信息,如文件大小、文件屬性、創(chuàng)建日期或修改日期等。圖7-3顯示文件信息文件對(duì)象File通過FSO對(duì)象的GetFile方法建立。本例演示了File對(duì)象的創(chuàng)建和使用。[建立工程]新建工程,按默認(rèn)名稱保存工程為“工程1”,窗體名稱保存為Form1。構(gòu)造用戶界面,在窗體上添加兩個(gè)Label控件,一個(gè)通用對(duì)話框控件和一個(gè)命令按鈕,采用默認(rèn)名稱,界面布局如圖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&"文件擴(kuò)展名是:"&Fso.GetExtensionName(FileName)&_

vbCrLf12 Setf=Fso.GetFile(FileName)'建立文件操作對(duì)象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對(duì)象Fso。行3:定義File變量,準(zhǔn)備保存用Fso對(duì)象的方法創(chuàng)建的File對(duì)象。行6:打開選擇文件對(duì)話框。行7:暫時(shí)保存文件名及位置信息。行10:FSO對(duì)象的GetFileName方法,僅僅從位置中取得文件名,不包含文件位置。行11:FSO對(duì)象的GetExtensionName方法,可以取得文件名的擴(kuò)展名。行12:FSO對(duì)象的GetFile方法,通過指定文件絕對(duì)位置,創(chuàng)建文件對(duì)象File。行14~18:文件相關(guān)屬性:ParentFolder屬性:取得文件所在的文件位置。Size屬性:取得文件大小,單位為字節(jié)Byte,其中:1KB=1024Byte;1MB=1024KB;1GB=1024MB。DateCreated屬性:文件創(chuàng)建日期。DateLastModified屬性:文件最后一次修改日期。Attributes屬性:文件屬性,可以設(shè)置或獲取。如常規(guī)、只讀、隱藏等,其值代表的含義見如表7-2。表7-2Attributes屬性值及含義常數(shù)值描述Normal0一般文件。未設(shè)置屬性。ReadOnly1只讀文件。屬性為讀/寫。Hidden2隱藏文件。屬性為讀/寫。System4系統(tǒng)文件。屬性為讀/寫。Volume8磁盤驅(qū)動(dòng)器卷標(biāo)。屬性為只讀。Directory16文件夾或目錄。屬性為只讀。Archive32自上次備份后已經(jīng)改變的文件。屬性為讀/寫。Alias64鏈接或快捷方式。屬性為只讀。Compressed128壓縮文件。屬性為只讀通過文件對(duì)象的幫助,可以查看其所有屬性和方法,如圖7-5所示。其中,f必須定義為File類型變量方可即時(shí)查看。圖7-5文件對(duì)象屬性和方法7.1.4文件夾對(duì)象(Folder)的使用[例7-4]列出C盤下面所有子文件夾,運(yùn)行結(jié)果如圖7-6所示。圖7-6列出子文件夾[分析]與File對(duì)象創(chuàng)建和使用類似,通過文件夾對(duì)象Folder,也可以取得指定文件夾相關(guān)的一些信息,如文件夾大小、文件夾屬性、創(chuàng)建日期或修改日期,此外,還可以取得其子文件夾的信息,以及包含文件的信息。文件對(duì)象Folder是通過FSO對(duì)象的GetFolder方法建立的。下面的例子演示了GetFolder對(duì)象的創(chuàng)建和使用。[建立工程]新建工程,按默認(rèn)名稱保存工程為“工程1”,窗體名稱保存為Form1。按圖7-6所示構(gòu)造用戶界面,在窗體中添加一個(gè)ListBox列表框控件框和一個(gè)按鈕控件,所有控件名稱采用默認(rèn)。[程序代碼]1 DimfsoAsNewFileSystemObject3 PrivateSubCommand1_Click()4 DimfdAsFolder,sfdAsFolder6 Setfd=fso.GetFolder("c:\")7 8 List1.Clear9 List1.AddItemfd.Name&"包含的子文件夾個(gè)數(shù)為:"&fd.SubFolders.Count10 ForEachsfdInfd.SubFolders11 List1.AddItemsfd.Path12 Next13 EndSub[代碼說明]行1:創(chuàng)建FSO對(duì)象Fso。行4:fd為文件夾類型變量,準(zhǔn)備保存使用FSO方法GetFolder建立的文件夾對(duì)象,Sfd準(zhǔn)備保存子文件夾對(duì)象。注意:子文件夾也是文件夾Folder類型。行6:建立文件夾Folder對(duì)象。行9:SubFolders為文件夾的子文件集合對(duì)象,相當(dāng)于數(shù)組。行10~12:使用列舉循環(huán),依次取得每個(gè)子文件夾。Path為文件夾的位置屬性,Name為文件夾名稱屬性(不包含位置);[例7-5]列出C:\所有的文件,運(yùn)行結(jié)果如圖7-7所示。圖7-7列出所有文件[建立工程]新建工程,按默認(rèn)名稱保存工程為“工程1”,窗體名稱保存為Form1。按圖7-7所示構(gòu)造用戶界面,在窗體中添加一個(gè)ListBox列表框控件框和一個(gè)按鈕控件,所有控件名稱采用默認(rèn)。[程序代碼]1 PrivateSubCommand1_Click()2 DimfdAsFolder,fAsFile3 Setfd=fso.GetFolder("c:\")4 List1.AddItemfd.Name&"包含的子文件個(gè)數(shù)為:"&fd.Files.Count5 6 ForEachfInfd.Files7 List1.AddItemf.Path8 Next9 EndSub[代碼說明]本例中的Files是文件夾中所有文件的集合對(duì)象,文件對(duì)象中的Path屬性包含文件的位置及文件名。代碼其他行含義與例7-5相似,不再贅述。[例7-6]

列舉出C:\ABC文件夾中每一子文件夾的文件信息。新建工程,按默認(rèn)名稱保存工程為“工程1”,窗體名稱保存為Form1。界面布局如例7-4和例7-5相同,運(yùn)行結(jié)果如圖7-8所示。本例代碼請(qǐng)讀者自行分析。圖7-8列舉每一子文件夾文件[程序代碼]PrivateSubCommand1_Click()DimfdAsFolderIffso.FolderExists("C:\ABC")ThenSetfd=fso.GetFolder("C:\ABC")

ListFile

fdEndIfEndSubSubListFile(fdAsFolder)ForEachfInfd.FilesList1.AddItemf.PathNextDimsfdAsFolderForEachsfdInfd.SubFolders

ListFile

sfdNextEndSub[總結(jié)與提高]例7-4和例7-5只實(shí)現(xiàn)了列舉文件夾中第1層子文件夾內(nèi)容和文件內(nèi)容,如果要列舉每一個(gè)子文件夾的內(nèi)容和文件內(nèi)容,需要使用遞歸循環(huán)實(shí)現(xiàn)。例7-6演示了列舉文件夾中子文件夾內(nèi)容,以及子文件夾中的每一個(gè)子文件的文件內(nèi)容。7.2.5文本文件讀寫(TextStream)對(duì)象的使用[例7-7]將文本框Text1的錄入的數(shù)據(jù)保存到C:\test.txt。如果文件已存在,則將數(shù)據(jù)添加到文件末尾,如果不存在,則創(chuàng)建新文件。[分析]FSO的子對(duì)象TextStream對(duì)象用于讀寫順序的文本文件。一般讀/寫文本文件的步驟是:打開文件;讀/寫文件內(nèi)容;關(guān)閉文件??梢杂肍SO提供的OpenTextFile方法來創(chuàng)建TextStream對(duì)象。OpenTextFile方法的語法格式:OpenTextFile(文件名[,讀寫方式[,是否建立]])說明:打開一個(gè)指定的文件并返回一個(gè)TextStream

對(duì)象,該對(duì)象可用于對(duì)文件進(jìn)行讀操作或追加操作。其中:[文件名]:指定需要操作的文本文件。[讀寫方式]:可以是ForAppending(添加數(shù)據(jù)到已存在文件的末尾);ForWriting(新建文件并準(zhǔn)備添加數(shù)據(jù),如果文件存在,則覆蓋);ForReading(只讀方式,以該方式打開的文件只能讀,不能寫)。[是否建立]:如果讀寫方式為ForWriting,若打開的文件不存在,則新建文件;若存在,暫且覆蓋原來內(nèi)容;如果讀寫方式為ForAppending,則在文件不存在時(shí)新建文件。要把數(shù)據(jù)保存到文件,可以使用TextStream對(duì)象的WriteLine方法寫入內(nèi)容;使用WriteBlankLines(x)寫入X行空行(換行)。[建立工程]新建工程,按默認(rèn)名稱保存工程為“工程1”,窗體名稱保存為Form1。按圖7-9所示構(gòu)造用戶界面。多行文本框,帶水平和垂直滾動(dòng)條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變量,準(zhǔn)備保存創(chuàng)建的TextStream對(duì)象。行7:如果文件存在,則以添加方式打開文件。OpenTextFile方法打開文件后,將返回TextStream對(duì)象。通過TextStream對(duì)象txt的WriteLine方法,將所有數(shù)據(jù)作為文件中的一行寫入。行10:如果文件不存在,則以新建文件的方式打開文件。注意:如果無論文件是否存在都要重新建立,則不需要判斷文件是否存在,直接使用本行代碼即可。[總結(jié)與提高]以下代碼說明如何從文件中讀出一行數(shù)據(jù):DimtxtAsTextStreamIffs.FileExists("c:\test.txt")=TrueThenSettxt=fs.OpenTextFile("c:\test.txt",ForReading)Text1.Text=txt.ReadAll

txt.CloseEndIf注意:打開文件時(shí),使用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對(duì)象的ReadLine方法是每次讀文件中的一行數(shù)據(jù),再次讀取時(shí)將自動(dòng)移動(dòng)到下一行準(zhǔn)備讀,AtEndOfLine屬性判斷是否文件所有的行已經(jīng)讀取完畢。7.1.6獲取驅(qū)動(dòng)器信息[例7-8]將本機(jī)驅(qū)動(dòng)器列表添加到Combo組合框。選擇對(duì)應(yīng)驅(qū)動(dòng)器時(shí),如果是硬盤分區(qū),則列出分區(qū)的總空間大小、有效空間大小,運(yùn)行界面如圖7-10所示。圖7-10運(yùn)行界面[分析]可以用FSO對(duì)象的Drives集合對(duì)象得到本機(jī)所有的驅(qū)動(dòng)器列表,然后用FSO的GetDrive方法得到每一個(gè)驅(qū)動(dòng)器的具體Drive對(duì)象,從而得到驅(qū)動(dòng)器的信息,例如判斷是否是光盤、移動(dòng)磁盤、或硬盤盤符等。Drive對(duì)象允許獲得一個(gè)系統(tǒng)的各個(gè)驅(qū)動(dòng)器的信息,這些驅(qū)動(dòng)器可以是物理的,也可以是位于網(wǎng)絡(luò)上的。通過該對(duì)象的屬性可以獲得下列信息:以字節(jié)表示的驅(qū)動(dòng)器總空間(TotalSize

屬性)。以字節(jié)表示的驅(qū)動(dòng)器可用空間(AvailableSpace

或FreeSpace

屬性)。給驅(qū)動(dòng)器指定的字母號(hào)(DriveLetter

屬性)。驅(qū)動(dòng)器類型,諸如可移動(dòng)的、固定的、網(wǎng)絡(luò)、CD-ROM、或者RAM盤(DriveType

屬性)。驅(qū)動(dòng)器序列號(hào)(SerialNumber

屬性)。驅(qū)動(dòng)器使用的文件系統(tǒng)類型,諸如FAT、FAT32、NTFS等(FileSystem

屬性)。驅(qū)動(dòng)器是否可用(IsReady

屬性)。共享和/或卷標(biāo)的名稱(ShareName

和VolumeName

屬性)。驅(qū)動(dòng)器的路徑或根文件夾(Path和RootFolder

屬性)。[建立工程]新建工程,按默認(rèn)名稱保存工程為“工程1”,窗體名稱保存為Form1。按圖7-10所示構(gòu)造用戶界面。在窗體上添加組框控件Combo1,設(shè)置其Style屬性為2-DropDownList;添加標(biāo)簽控件Label1,設(shè)置其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類型變量,準(zhǔn)備在列舉過程中保存具體的驅(qū)動(dòng)器Drive對(duì)象。行4~6:FSO的Drives屬性包含本機(jī)所有驅(qū)動(dòng)器對(duì)象,Drive對(duì)象的DriveLetter屬性代表驅(qū)動(dòng)器盤符的首字母,將盤符首字母添加到組合框。行7:設(shè)置組合框當(dāng)前選擇的項(xiàng)為第1項(xiàng),同時(shí)觸發(fā)其Click事件。行12:通過FSO的方法GetDrive,建立驅(qū)動(dòng)器對(duì)象。行14:DriveType屬性代表驅(qū)動(dòng)器類型。其值可能是:0-UnknownType;1-Removable;2-Fixed;3-Network;4-CD-ROM;5-RAMDisk。行15~17:取得驅(qū)動(dòng)器屬性值。7.2文件系統(tǒng)控件的使用7.2.1系統(tǒng)提供的文件系統(tǒng)控件應(yīng)用程序的驅(qū)動(dòng)器、目錄和文件操作信息既可以用CommonDialog提供的標(biāo)準(zhǔn)對(duì)話框,也可以用VisualBasic6.0提供的文件系統(tǒng)控件組合創(chuàng)建自定義對(duì)話框。這些控件包括驅(qū)動(dòng)器列表框控件(DriveListBox)、目錄列表框控件(DirListBox)、文件列表框控件(FileListBox),這三個(gè)文件系統(tǒng)控件能夠自動(dòng)地從操作系統(tǒng)中獲取一些信息,應(yīng)用程序可以訪問這些信息,或通過控件屬性獲取各控件的信息。1.驅(qū)動(dòng)器列表框驅(qū)動(dòng)器列表框是一個(gè)下拉式的列表框,默認(rèn)狀態(tài)下顯示當(dāng)前驅(qū)動(dòng)器名。程序運(yùn)行時(shí),該控件獲得焦點(diǎn)(光標(biāo)移入該控件)時(shí),可輸入任何有效的驅(qū)動(dòng)器標(biāo)識(shí)符,或者單擊右側(cè)的下拉箭頭選擇列表框中的驅(qū)動(dòng)器標(biāo)識(shí)符。單擊箭頭可下拉列表框以列舉所有的有效驅(qū)動(dòng)器。若從中選定新驅(qū)動(dòng)器,該驅(qū)動(dòng)器將出現(xiàn)在列表框的頂端??梢酝ㄟ^檢查Drive屬性判斷當(dāng)前選擇的驅(qū)動(dòng)器。應(yīng)用程序也可簡(jiǎn)單的賦值語句來指定出現(xiàn)在列表框頂端的驅(qū)動(dòng)器,即:Drive1.Drive=“c:\”。驅(qū)動(dòng)器列表框顯示可用的有效驅(qū)動(dòng)器。從列表框中選擇驅(qū)動(dòng)器不能自動(dòng)地改變當(dāng)前的工作驅(qū)動(dòng)器;但可用Drive屬性在操作系統(tǒng)級(jí)改變驅(qū)動(dòng)器,方法:將Drive屬性作為ChDrive

語句的參數(shù),即:ChDriveDrive1.Drive。在驅(qū)動(dòng)器列表框中選擇新的驅(qū)動(dòng)器后,將觸發(fā)一個(gè)Change事件。2.目錄列表框目錄列表框可以顯示指定驅(qū)動(dòng)器上的目錄結(jié)構(gòu),一般從根目錄開始顯示用戶系統(tǒng)的當(dāng)前驅(qū)動(dòng)器目錄結(jié)構(gòu)。當(dāng)前目錄名被突出顯示(默認(rèn)),而且顯示的目錄是按目錄層次依次縮進(jìn)。在目錄列表框中,當(dāng)前目錄下的子目錄也縮進(jìn)顯示。在列表框中上、下移動(dòng)時(shí),將依次突出顯示每個(gè)目錄項(xiàng),如圖7-11所示。圖7-11目錄列表框中顯示的目錄結(jié)構(gòu)(1)標(biāo)識(shí)單個(gè)目錄。列表框中的每個(gè)目錄關(guān)聯(lián)(對(duì)應(yīng))一個(gè)整型標(biāo)識(shí)符ListIndex(列表索引值),可以用來標(biāo)識(shí)單個(gè)目錄。Path屬性(Dir1.Path)指定目錄(當(dāng)前目錄)的ListIndex

值為-1;緊鄰其上目錄的ListIndex

值為–2;再上一級(jí)目錄的ListIndex為–3;依此類推。Dir1.Path的下一級(jí)子目錄(當(dāng)前目錄的下一級(jí)目錄)的ListIndex值為0。若其下一級(jí)子目錄有多個(gè)目錄,則每個(gè)目錄的ListIndex

值按1、2、3...的順序依次排列,如圖7-11所示。CommonDialog

控件中提供這方面的功能。(2)設(shè)置當(dāng)前目錄。用目錄列表框的Path屬性可以設(shè)置或顯示列表框的當(dāng)前目錄(ListIndex=-1)。例如,若將目錄列表框Dir1的Path屬性直接賦值“c:\Programfile\MicrosoftVisualStudio\Vb98\Template\Classes”,則該目錄成為當(dāng)前目錄。將驅(qū)動(dòng)器列表框Drive1的Drive屬性值賦給目錄列表框的Path屬性,可將驅(qū)動(dòng)器列表框中指定驅(qū)動(dòng)器中的當(dāng)前目錄顯示出來。執(zhí)行賦值語句時(shí),目錄列表框?qū)@示該驅(qū)動(dòng)器上所有有效的目錄和子目錄。缺省時(shí),目錄列表框?qū)@示驅(qū)動(dòng)器當(dāng)前目錄的所有上級(jí)目錄以及下一級(jí)子目錄,而驅(qū)動(dòng)器是被指定給Dir1.Path屬性的。目錄列表框并不在操作系統(tǒng)級(jí)設(shè)置當(dāng)前目錄;只是突出顯示當(dāng)前目錄并將其ListIndex

值設(shè)置為-1。設(shè)置當(dāng)前工作目錄應(yīng)使用ChDir語句。例如,以下語句可將當(dāng)前目錄變?yōu)槟夸浟斜砜蛑械囊粋€(gè)目錄:ChDirDir1.Path。在使用文件控件的應(yīng)用程序中,可用Application對(duì)象將當(dāng)前目錄設(shè)置為應(yīng)用程序的可執(zhí)行(.exe)文件所在目錄,即:ChDrive

App.Path '設(shè)置驅(qū)動(dòng)器。ChDir

App.Path'設(shè)置目錄。(3)單擊目錄項(xiàng)目。單擊目錄列表框中某個(gè)項(xiàng)目時(shí),將突出顯示該項(xiàng)目。雙擊某個(gè)項(xiàng)目時(shí),則把它賦予Path屬性并把其ListIndex

屬性設(shè)置為-1,然后重繪目錄列表框以顯示直接相鄰的下級(jí)子目錄。(4)查找目錄的相對(duì)位置。ListCount

屬性返回當(dāng)前擴(kuò)展目錄下的目錄數(shù)目,而不是目錄列表框中的目錄總數(shù)。因?yàn)楫?dāng)前擴(kuò)展目錄的ListIndex

值總為-1,所以可以編程來判斷在目錄層次結(jié)構(gòu)中,當(dāng)前展開目錄與根目錄有多大距離。3.文件列表框程序運(yùn)行時(shí),文件列表框顯示由Path屬性指定的包含在目錄中的文件。可以用以下語句在當(dāng)前驅(qū)動(dòng)器上顯示當(dāng)前目錄中的所有文件:File1.Path=Dir1.Path然后,可設(shè)置Pattern屬性顯示這些文件的子集。例如,設(shè)置*.frm

后,將只顯示擴(kuò)展名為frm的文件。Pattern屬性也接受由分號(hào)分隔的列表。例如,以下程序代碼將顯示所有擴(kuò)展名為.frm

和.bas的文件:File1.Pattern="*.frm;*.bas"VisualBasic也支持通配符“?”。例如,???.txt將顯示所有文件主名包含三個(gè)字符且擴(kuò)展名為.txt的文件。文件列表框的屬性也提供當(dāng)前選定文件的屬性(Archive、Normal、System、Hidden和ReadOnly)??梢栽谖募斜砜蛑杏眠@些屬性指定要顯示的文件類型。System和Hidden屬性的默認(rèn)值為False。Normal、Archive和ReadOnly

屬性的默認(rèn)值為True。Normal=True時(shí),將顯示無System或Hidden屬性的文件。當(dāng)Normal=False時(shí),仍然可顯示具有ReadOnly或Archive屬性的文件,方法是將這兩個(gè)屬性設(shè)置為True。4.使用文件系統(tǒng)的控件組合將文件系統(tǒng)控件進(jìn)行組合,可同步顯示驅(qū)動(dòng)器、目錄和文件的信息。對(duì)于驅(qū)動(dòng)器列表框(Drive1)、目錄列表框(Dir1)和文件列表框(File1),可以下步驟建立控件組合:(1)建立Drive1_Change事件,更新Drive1的顯示以反映新選定的驅(qū)動(dòng)器。即將新選定項(xiàng)目的(Drive1.Drive屬性)賦予Dir1列表框的Path屬性,程序代碼如下:PrivateSubDrive1_Change()Dir1.Path=Drive1.DriveEndSub(2)在Dir1_Change事件中更新Dir1的顯示以反映新驅(qū)動(dòng)器的當(dāng)前目錄。即將新路徑(Dir1.Path屬性)賦予File1列表框的File1.Path屬性,程序代碼如下:PrivateSubDir1_Change()File1.Path=Dir1.PathEndSub(3)File1.Path屬性賦值語句更新File1列表框中的顯示,以反映Dir1控件中的指定的路徑。單擊驅(qū)動(dòng)器列表框中的項(xiàng)目將觸發(fā)Change事件。此外,當(dāng)用戶選定項(xiàng)目并改變窗體上的焦點(diǎn)時(shí),也將觸發(fā)Change事件。7.2.2文件系統(tǒng)控件應(yīng)用[例7-9]使用驅(qū)動(dòng)器控件,制作如圖7-12所示的文件選擇對(duì)話框.。Dir1File1Dirve1圖7-12自定義打開文件對(duì)話框[分析]通常,驅(qū)動(dòng)器列表框控件、目錄列表框控件和文件列表框控件一起使用,以查看驅(qū)動(dòng)器、目錄和文件,其中的一些特殊屬性和事件使它們相互聯(lián)系起來,可以用多種方法混合、匹配文件系統(tǒng)控件,使文件操作十分靈活,這是CommonDialog控件無法做到的。但是,CommonDialog控件使用簡(jiǎn)單方便,若只需要標(biāo)準(zhǔn)的“打開文件”或“保存”對(duì)話框,用CommonDialog控件即可滿足要求。本例簡(jiǎn)單介紹文件系統(tǒng)控件的應(yīng)用。[建立工程]新建工程,按默認(rèn)名稱保存工程為“工程1”,窗體名稱保存為Form1。界面布局:為使界面整齊美觀,首先在窗體添加一個(gè)框架控件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:設(shè)置文件對(duì)話框顯示的文件類型顯示所有的文件類型。如僅顯示txt、Word和Excel文件,可以設(shè)置為:File1.Pattern=""*.txt;*.doc;*.xls"",每種類型之間用分號(hào)分隔。行3:設(shè)置首選驅(qū)動(dòng)器分區(qū)為C。行4:設(shè)置首選目錄為C根目錄。實(shí)際上,程序執(zhí)行到行3時(shí)已觸發(fā)Drive1的Change事件(行8~10),而Drive1的Change事件中已設(shè)置File1.Path屬性,本行是多余的。行8~9:每次改變驅(qū)動(dòng)器時(shí),將當(dāng)前驅(qū)動(dòng)器根目錄作為Dir欲顯示的目錄。該段代碼將觸發(fā)Dir的Change事件。因此,將同時(shí)執(zhí)行行12~13的代碼,設(shè)置File1控件顯示Dir1.Path中指定目錄下的文件。行12~13:根據(jù)File1的Pattern屬性設(shè)置,顯示指定目錄下的滿足篩選類型條件的文件。行18:獲取選擇文件的位置和文件名。行19:如果是根目錄下的文件,按照行18的組合,將多一個(gè)“\”符號(hào)。因此,替換兩個(gè)“\\”為一個(gè),以滿足路徑描述格式規(guī)則,如“C:\A.txt”;如不經(jīng)過替換,文本將得到“c:\\A.txt”。7.3典型例題[例7-10]一個(gè)簡(jiǎn)單的文字處理軟件設(shè)計(jì)實(shí)例[分析]本例是一個(gè)簡(jiǎn)單的文字處理軟件,該軟件實(shí)現(xiàn)了文本輸入、文本編輯、整體文本格式及顏色設(shè)置、保存及打文件等功能,處理的文件后綴定義為“.MyTxt”。文件除保存文本外,也保存了文本的字體格式信息。[建立工程]1.新建工程,按默認(rèn)名稱保存工程為“工程1”,窗體名稱保存為Form1。2.設(shè)計(jì)程序界面,如圖7-17所示。圖7-17

程序界面包括主窗體、下拉式主菜單、工具欄、文本編輯框等部分。(1)主窗體:采用默認(rèn)設(shè)置,窗體名稱為:Form1(2)菜單:各菜單及子菜單名稱及對(duì)應(yīng)快捷鍵見表7-12。表7-12菜單及子菜單名稱及對(duì)應(yīng)快捷鍵層次顯示文字名稱熱鍵快捷鍵1文件nmuFileF(NULL)2新鍵nmuNewNCtrl+N打開nmuOpenOCtrl+O保存nmuSaveSCtrl+S另存為nmuSaveAsA(NULL)退出nmuExitx(NULL)1編輯nmuEditE(NULL)2剪切nmuCutXCtrl+X復(fù)制nmuCopyCCtrl+C粘貼nmuPastePCtrl+V1格式nmuFormatO(NULL)2字體nmuFontF(NULL)顏色nmuColorC(NULL)1幫助nmuHelpH(NULL)2關(guān)于MytText1.0nmuAboutA(NULL)(3)工具欄對(duì)象名稱:ToolBar1。對(duì)應(yīng)菜單的設(shè)置,分為九組,分別對(duì)應(yīng)“新建”、“打開”、“保存”、“剪切”、“復(fù)制”、“粘貼”、“字體”、“顏色”、“幫助”菜單項(xiàng),對(duì)應(yīng)關(guān)鍵字(Key)按順序?yàn)椋篵New、bOpen、bSave、bCut、bCopy、bPaste、bFont、bColor、bHelp。(4)文本編輯框:多行文本框,且有垂直滾動(dòng)條,默認(rèn)情況下顯示空文本,對(duì)象名為Text1。3.屬性設(shè)置:Text1.Text=””Text1.MutiLine=TrueText1.ScrollBars=2[程序代碼](1)聲明全局變量:DimCurrentFileNameAsString‘聲名字符串變量用于保存當(dāng)前操作文件的文件名DimbTextChangeAsBoolean‘聲明布爾類型變量用于標(biāo)識(shí)文本內(nèi)容是否改變(2)在窗口Form的事件Load中初始化全局變量:PrivateSubForm_Load()bTextChange=FalsebTextChange=“”EndSub(3)編寫相應(yīng)的事件過程:PublicSubFileOpen()‘打開文件

DimTextStrAsStringCommonDialog1.ShowOpen‘顯示打開文件對(duì)話框

CurrentFileName=CommonDialog1.FileName‘獲取文件名作為當(dāng)前操作文件名

IfCurrentFileName<>""Then‘判斷文件是否存在

FileNo=FreeFile‘取得可用文件號(hào)

OpenCurrentFileNameForInputAsFileNo‘打開文件

Input#FileNo,TextStr,vFontBold,vFontName,vFontSize,vFontItalic,vFontUnderline,vFontStrikethru,vColor‘讀取文件內(nèi)容,TextStr為文本內(nèi)容,后邊為字體粗細(xì)、字體名稱、大小等字體格式信息。

CloseFileNo‘關(guān)閉文件

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‘取得可用文件號(hào)

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‘文件已保存,設(shè)置未改變標(biāo)識(shí)

EndIfEndIfEndSubPublicSubFileSaveAs()‘文件另存為

CommonDialog1.ShowSave‘顯示“打開“對(duì)話框

CurrentFileName=CommonDialog1.FileName‘獲取指定文件為當(dāng)前文件名

FileSave‘保存文件EndSubPublicSubSetFont()‘設(shè)置字體格式

CommonDialog1.Flags=3‘加載字體

CommonDialog1.ShowFont‘顯示“字體“對(duì)話框

Text1.Font.Bold=CommonDialog1.FontBold‘設(shè)置字體粗細(xì)

Text1.Font.Name=CommonDialog1.FontName‘設(shè)置字體名稱

Text1.Font.Size=CommonDialog1.FontSize‘設(shè)置字體大小

Text1.Font.Italic=CommonDialog1.FontItalic‘設(shè)置是否為斜體

Text1.Font.Underline=CommonDialog1.FontUnderli

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論