Excel-VBA操作文件四大方法之一
在我們?nèi)粘J褂肊xcel的時候,不僅會用到當(dāng)前Excel文件的數(shù)據(jù),還經(jīng)常需要訪問其他的數(shù)據(jù)文件。這些數(shù)據(jù)文件可能是Excel文件、文本文件或數(shù)據(jù)庫文件等。經(jīng)常有朋友會問如何在vba代碼里操作這些數(shù)據(jù)文件?本文就系統(tǒng)地介紹一下在Excel中應(yīng)用VBA操作數(shù)據(jù)文件的方法。 本文主要介紹四種常用的方法: 當(dāng)然對于數(shù)據(jù)庫文件,還可以利用ADO+SQL的方法操作,不過論壇已經(jīng)有前輩詳細(xì)介紹過此類方法,本文就不再重復(fù)了。 一、利用Excel對象來處理文件 利用Excel對象自帶的方法來操作文件是最方便,也是最簡單的。 1、打開Excel文件 我們可以用Workbooks.Open方法打開一個Excel工作簿。 2、打開文本文件 使用Open方法也可以打開文本文件,但建議使用OpenText方法。此方法是載入一個文本文件,并將其作為包含單個工作表的工作簿進(jìn)行分列處理,然后在此工作表中放入經(jīng)過分列處理的文本文件數(shù)據(jù)。完整語法如下: 關(guān)于以上參數(shù)的具體含義可以參看VBA的幫助,這里就不重復(fù)了。在實際的編程中,一般無需對這些復(fù)雜的參數(shù)進(jìn)行處理。可以通過錄制宏來得到打開一個文本文件的VBA代碼。具體方法就是選擇“文件——打開”,然后選擇打開文本文件,就會出現(xiàn)文本導(dǎo)入向?qū)?,一步一步?zhí)行完,直到文本打開后,停止錄制。 ‘ 在實際編程中只要做相應(yīng)的修改就可以使用了。 3、打開其他文件 利用Excel對象還可以打開XML文件和一些數(shù)據(jù)庫(如Access)文件,對應(yīng)XML文件,需要Excel2003以上的版本。 OpenXML方法的語法如下: Stylesheets Variant 類型,可選。單個值或值的數(shù)組,用于指定要應(yīng)用哪些 XSL 轉(zhuǎn)換 (XSLT) 樣式表處理指令。 LoadOption Variant 類型,轉(zhuǎn)換。指定 Excel 打開 XML 數(shù)據(jù)文件的方式??蔀?XlXmlLoadOption 常量之一。 XlXmlLoadOption 可為以下 XlXmlLoadOption 常量之一:
Sub UseOpenXML() OpenDatabase 方法語法如下: FileName String 類型,必需。連接字符串。 CommandText Variant 類型,可選。查詢的命令文本。 CommandType Variant 類型,可選。查詢的命令類型。以下是可用的命令類型:Default、SQL 和 Table。 BackgroundQuery Variant 類型,可選。查詢的背景。 ImportDataAs Variant 類型,可選。確定查詢的格式。 示例 Sub OpenDatabase() Workbooks.OpenDatabase FileName:="C:\northwind.mdb" End Sub 4、保存文件 文件的保存使用Workbook對象的Save或SaveAs方法。 如果是第一次保存工作簿或要另存為,請使用 SaveAs 方法為該文件指定文件名。 具體參數(shù)含義可參看VBA幫助,使用都比較簡單。 Set NewBook = Workbooks.Add Application.GetSaveAsFilename為調(diào)出標(biāo)準(zhǔn)的“另存為”對話框,獲取用戶文件名,但并不真正保存任何文件,然后使用代碼保存文件。還有Application.GetOpenFileName可以調(diào)出標(biāo)準(zhǔn)的“打開”對話框。 5、關(guān)閉文件 關(guān)閉文件可以使用Workbooks集合或Workbook對象的 Close 方法。前者是關(guān)閉所有打開的工作簿,后者關(guān)閉特定的工作簿。 SaveChanges參數(shù)表示是否保存更改,對許多不需要更改的操作,可設(shè)置為False以免彈出保存更改提示的對話框。 示例 Workbooks("BOOK1.XLS").Close SaveChanges:=False Workbooks.Close 6、綜合實例 假如F盤有一個Excel文件test.xls,現(xiàn)在有另一個Excel文件要訪問test.xls的數(shù)據(jù),我們來看用VBA代碼如何操作。代碼如下: 7、總結(jié) 利用Excel對象的方法進(jìn)行文件操作是最簡單,也是最方便的,適合初學(xué)者。對于Excel文件格式,如果我們僅僅是讀取其表格中的內(nèi)容,這種方法也是首選。對于文本文件的操作,使用第二種方法比較方便,若要將文本轉(zhuǎn)換成表格,那么使用此方法也是合適的。
如何在d:\test.xls已打開的情況下不讓以下的語句再去創(chuàng)建一個test.xls的實例(雖然它標(biāo)識為只讀), 并給出文件已打開的提示. 先做一個判斷!判斷該工作簿是否打開了?
例如: Set xlexcel = CreateObject("excel.application") dim wb as object set wb = xlexcel.workbooks("test.xls") if wb is nothing then msgbox "工作簿未打開!" xlexcel.Workbooks.Open "d:\test.xls" end if Excel-VBA操作文件四大方法之二
二、利用VBA文件處理語句來處理文件 VBA包含了許多用于文件操作的語句和函數(shù),可以滿足絕大多數(shù)情況下的文件操作要求。下面我們按照操作目的進(jìn)行一一介紹。 (一)文件處理 語法:Name oldpathname As newpathname 功能:重命名一個文件、目錄、或文件夾,移動一個文件。 說明:在一個已打開的文件上使用 Name,將會產(chǎn)生錯誤。進(jìn)行文件操作時,一定要注意錯誤處理。 示例: 注意:Name不能移動一個目錄或文件夾。 2、FileCopy 語句 語法:FileCopy source, destination 功能:復(fù)制一個文件。 說明:如果對一個已打開的文件使用 FileCopy 語句,則會產(chǎn)生錯誤。 示例: 3、Kill 語句 語法:Kill pathname 功能:從磁盤中刪除文件。 說明:Kill 支持多字符 (*) 和單字符 (?) 的統(tǒng)配符來指定多重文件。如果使用 Kill 來刪除一個已打開的文件,則會產(chǎn)生錯誤。 示例: 4、GetAttr 函數(shù) 語法:GetAttr(pathname) 功能:獲取一個文件、目錄、或文件夾的屬性。返回一個 Integer值。 返回值 由 GetAttr 返回的值,是下面這些屬性值的總和: 常數(shù) 值 描述 說明:若要判斷是否設(shè)置了某個屬性,在 GetAttr 函數(shù)與想要得知的屬性值之間使用 And 運算符與逐位比較。如果所得的結(jié)果不為零,則表示設(shè)置了這個屬性值。 示例: 為判斷一個文件是否只讀,可用下法: 5、SetAttr 語句 語法:SetAttr pathname, attributes 功能:為一個文件設(shè)置屬性。 說明:如果想要給一個已打開的文件設(shè)置屬性,則會產(chǎn)生運行時錯誤。 示例: 6、FileLen 函數(shù) 語法:FileLen(pathname) 功能:獲取一個文件的長度,單位是字節(jié)。 說明:當(dāng)調(diào)用 FileLen 函數(shù)時,不需要打開文件,如果所指定的文件已經(jīng)打開,則返回的值是這個文件在打開前的大小。 7、FileDateTime 函數(shù) 語法:FileDateTime(pathname) 功能:獲取一個文件被創(chuàng)建或最后修改后的日期和時間。 示例:
1、CurDir 函數(shù) 語法:CurDir[(drive)] 功能:返回當(dāng)前的路徑。 說明:drive 參數(shù)是可選的,它指定一個存在的驅(qū)動器。如果沒有指定驅(qū)動器,或 drive 是零長度字符串 (""),則 CurDir 會返回當(dāng)前驅(qū)動器的路徑。 示例: 2、ChDir 語句 語法:ChDir path 功能:改變當(dāng)前的目錄或文件夾。 說明:ChDir 語句改變?nèi)笔∧夸浳恢?,但不會改變?nèi)笔◎?qū)動器位置。缺省驅(qū)動器一般是C。 示例: ChDir "D:\temp" 3、ChDrive 語句 語法:ChDrive drive 功能:改變當(dāng)前的驅(qū)動器。 說明:如果使用零長度的字符串 (""),則當(dāng)前的驅(qū)動器將不會改變。如果 drive 參數(shù)中有多個字符,則 ChDrive 只會使用首字母。 示例: 與上例比較,用CurDir返回的是“D:\temp”,當(dāng)前驅(qū)動器已經(jīng)變?yōu)镈了。 4、Dir 函數(shù) 語法:Dir[(pathname[, attributes])] 說明:在第一次調(diào)用 Dir 函數(shù)時,必須指定 pathname,否則會產(chǎn)生錯誤。如果也指定了文件屬性,那么就必須包括 pathname。 Dir 會返回匹配 pathname 的第一個文件名。若想得到其它匹配 pathname 的文件名,再一次調(diào)用 Dir,且不要使用參數(shù)。如果已沒有合乎條件的文件,則 Dir 會返回一個零長度字符串 ("")。一旦返回值為零長度字符串,并要再次調(diào)用 Dir 時,就必須指定 pathname,否則會產(chǎn)生錯誤。不必訪問到所有匹配當(dāng)前 pathname 的文件名,就可以改變到一個新的 pathname 上。但是,不能以遞歸方式來調(diào)用 Dir 函數(shù)。以 vbDirectory 屬性來調(diào)用 Dir 不能連續(xù)地返回子目錄。 示例: 以下過程可顯示C盤根目錄下的所有目錄. MyPath = "c:\" End Sub 以下過程利用遞歸可以查找目錄和子目錄下的所有文件。 Public Sub FindFile(mPath As String, Optional sFile As String = "") If Right(mPath, 1) <> "\" Then ‘開始遞歸 End Sub
語法:MkDir path 功能:創(chuàng)建一個新的目錄或文件夾。 說明:path 可以包含驅(qū)動器。如果沒有指定驅(qū)動器,則 MkDir 會在當(dāng)前驅(qū)動器上創(chuàng)建新的目錄或文件夾。 示例: 6、RmDir 語句 語法:RmDir path 功能:刪除一個存在的目錄或文件夾。 說明:如果想要使用 RmDir 來刪除一個含有文件的目錄或文件夾,則會發(fā)生錯誤。在試圖刪除目錄或文件夾之前,先使用 Kill 語句來刪除所有文件。 示例:
RmDir "MYDIR" ‘ 將 MYDIR 刪除。 (三)處理文本文件
1、Open 語句 語法:Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength] 其中access、lock、reclength為可選參數(shù),一般不用。 filenumber 是一個有效的文件號,范圍在 1 到 511 之間。可以指定,也可使用 FreeFile 函數(shù)可得到下一個可用的文件號。 說明:如果 pathname 指定的文件不存在,那么,在用 Append、Binary、Output、或 Random 方式打開文件時,可以建立這一文件。 示例: 2、Close 語句 語法:Close [filenumberlist] 說明:打開文件后,必須在使用完后關(guān)閉文件。 示例: 3、Reset 語句 語法:Reset 功能:關(guān)閉所有用 Open 語句打開的磁盤文件。 說明:Reset 語句關(guān)閉 Open 語句打開的所有活動文件,并將文件緩沖區(qū)的所有內(nèi)容寫入磁盤。 示例: 4、FreeFile 函數(shù) 語法:FreeFile[(rangenumber)] 功能:提供一個尚未使用的文件號。 示例: fnum = FreeFile Open "F:\TEST.txt" For Input As #fnum Close #fnum
語法:EOF(filenumber) 功能:返回一個 Integer,它包含 Boolean 值 True,表明已經(jīng)到達(dá)為 Random 或順序 Input 打開的文件的結(jié)尾。 6、LOF 函數(shù) 語法:LOF(filenumber) 功能:返回一個 Long,表示用 Open 語句打開的文件的大小,該大小以字節(jié)為單位。 7、Loc 函數(shù) 語法:LOc(filenumber) 功能:返回一個 Long,在已打開的文件中指定當(dāng)前讀/寫位置。
語法:Input #filenumber, varlist 功能:從已打開的順序文件中讀出數(shù)據(jù)并將數(shù)據(jù)指定給變量。 說明:通常用 Write # 將 Input # 語句讀出的數(shù)據(jù)寫入文件。為了能夠用 Input # 語句將文件的數(shù)據(jù)正確讀入到變量中,在將數(shù)據(jù)寫入文件時,要使用 Write # 語句而不使用 Print # 語句。使用 Write # 語句可以確保將各個單獨的數(shù)據(jù)域正確分隔開。 示例: Dim MyString, MyNumber 9、Write # 語句 語法:Write #filenumber, [outputlist] 功能:將數(shù)據(jù)寫入順序文件。 說明:通常用 Input # 從文件讀出 Write # 寫入的數(shù)據(jù)。 用 Write # 將數(shù)據(jù)寫入文件時將遵循幾個通用的約定,使得無論什么區(qū)域都可用 Input # 讀出并正確解釋數(shù)據(jù): ·在寫入數(shù)值數(shù)據(jù)時總使用句號作為十進(jìn)制分隔符。 ·對于 Boolean 類型的數(shù)據(jù),或者打印 #TRUE# 或者打印 #FALSE#。無論在什么地區(qū),都不將 True 和 False 這兩個關(guān)鍵字翻譯出來。 ·使用通用的日期格式將 Date 類型的數(shù)據(jù)寫入文件中。當(dāng)日期或時間的部件丟失或為零時,只將現(xiàn)有部分寫入文件中。 ·如果 outputlist 的數(shù)據(jù)為 Empty,則不將任何數(shù)據(jù)寫入文件。但對 Null 數(shù)據(jù),則要寫入 #NULL#。 ·如果 outputlist 數(shù)據(jù)為 Null 數(shù)據(jù),則將 #NULL# 寫入文件中。 ·對于 Error 類型的數(shù)據(jù),輸出看起來與 #ERROR errorcode# 一樣。無論在什么地區(qū),都不將關(guān)鍵字 Error 翻譯出來。 示例: Dim MyBool, MyDate, MyNull, MyError 我們可以看到寫入的內(nèi)容為: #FALSE#," is a Boolean value" 10、Line Input # 語句 語法:Line Input #filenumber, varname 功能:從已打開的順序文件中讀出一行并將它分配給 String 變量。 說明:通常用 Print # 與 Line Input # 語句配合使用。 示例: 11、Input 函數(shù) 語法:Input(number, [#]filenumber) 功能:返回 String,它包含以 Input 或 Binary 方式打開的文件中的字符。 說明:通常用 Print # 或 Put 將 Input 函數(shù)讀出的數(shù)據(jù)寫入文件。Input 函數(shù)只用于以 Input 或 Binary 方式打開的文件。 示例: 下面這個函數(shù)可以將文本文件的數(shù)據(jù)一次讀入到一個字符串(但是若包含中文時會出錯,因為一個中文字占2個字節(jié))。 Public Function ReadText(FileName As String) Dim fnum%, isopen As Boolean erro: End Function 12、Print # 語句 語法:Print #filenumber, [outputlist] outputlist 參數(shù)的設(shè)置如下: Spc(n) 用來在輸出數(shù)據(jù)中插入空白字符,而 n 指的是要插入的空白字符數(shù)。
說明:通常用 Line Input # 或 Input 讀出 Print # 在文件中寫入的數(shù)據(jù)。 示例: ‘ 賦值 Boolean、Date、Null 及 Error 等。 以上代碼寫入的內(nèi)容如下: Zone 1 Zone 2 13、Width # 語句 語法:Width #filenumber, width 功能:將一個輸出行的寬度指定給用 Open 語句打開的文件。 示例: 以上代碼寫入的內(nèi)容如下:
01234 56789 (四)處理二進(jìn)制文件
打開二進(jìn)制文件可以使用Open語句的Random和Binary方式打開。二進(jìn)制文件讀寫使用Get和Put語句。 1、Put 語句 語法:Put [#]filenumber, [recnumber], varname recnumber 可選。Variant (Long)。記錄號(Random 方式的文件)或字節(jié)數(shù)(Binary 方式的文件),指明在此處開始寫入。 說明:通常用 Get 將 Put 寫入的文件數(shù)據(jù)讀出來。 示例:
語法:Get [#]filenumber, [recnumber], varname recnumber 可選。Variant (Long)。記錄號(Random 方式的文件)或字節(jié)數(shù)(Binary 方式的文件),以表示在此處開始讀出數(shù)據(jù)。 功能:將一個已打開的磁盤文件讀入一個變量之中。 說明:通常用 Put 將 Get 讀出的數(shù)據(jù)寫入一個文件。 示例:讀取以上代碼寫入的內(nèi)容 在立即窗口可以看到如下內(nèi)容:
語法:Seek [#]filenumber, position 功能:在 Open 語句打開的文件中,設(shè)置下一個讀/寫操作的位置。 說明:可以用Seek語句指定Get語句的讀取位置,但在 Get 及 Put 語句中指定的記錄號將覆蓋由 Seek 語句指定的文件位置。 示例: 4、Seek 函數(shù) 語法:Seek(filenumber) 功能:返回一個 Long,在 Open 語句打開的文件中指定當(dāng)前的讀/寫位置。 說明:在使用Get語句讀取文件時,必須用LOF函數(shù)來判斷是否到達(dá)文件末尾,而不是用EOF函數(shù)。可以使用Seek函數(shù)判斷當(dāng)前位置,然后與LOF的值比較。 示例:
(五)總結(jié) VBA語句的文件操作涵蓋了文件操作的絕大部分內(nèi)容,很多函數(shù)的使用也很簡單,一般的文件讀寫也非常方便,特別是對文本文件。但對于復(fù)雜的文件讀寫,代碼的結(jié)構(gòu)和維護(hù)性都不好。因此在VB6之后,微軟引入了FileSystemObject對象模型,提供了面向?qū)ο蟮念悗欤瑏聿僮黩?qū)動器、文件夾和文件。但對于二進(jìn)制文件的操作,目前還只能用VBA語句。 Excel-VBA操作文件四大方法之三
三、利用FileSystemObject對象來處理文件 FileSystemObject對象模型,是微軟提供的專門用來訪問計算機文件系統(tǒng)的,具有大量的屬性、方法和事件。其使用面向?qū)ο蟮?#8220;object.method”語法來處理文件夾和文件,使用起來十分方便(需Office 2000以后版本)。FileSystemObject并不是VBA的一部分,它是以一個COM組件的形式提供的。因此,要使用先要創(chuàng)建FileSystemObject對象。 FileSystemObject對象模型包含了下面的對象和集合: ·FileSystemObject 主對象,包含用來創(chuàng)建、刪除和獲得有關(guān)信息,以及用來操作驅(qū)動器、文件夾和文件的方法和屬性。 ·Drive 對象,包含用來獲得信息的方法和屬性,這些信息是關(guān)于連接在系統(tǒng)上的驅(qū)動器的,如有多少可用空間等。驅(qū)動器不一定是硬盤,也可以是CD-ROM、U盤甚至是通過網(wǎng)絡(luò)在邏輯上連接的硬盤(如公司里部門共享的服務(wù)器網(wǎng)絡(luò)硬盤)。 ·Drives 集合,提供驅(qū)動器的列表,這些驅(qū)動器以實物或在邏輯上與系統(tǒng)相連接。Drives集合包括所有驅(qū)動器,與類型無關(guān)。 ·File 對象,包含用來創(chuàng)建、刪除或移動文件的方法和屬性。 ·Files 集合,提供包含在文件夾內(nèi)的所有文件的列表。 ·Folder 對象,包含用來創(chuàng)建、刪除或移動文件夾的方法和屬性。 ·Folders 集合,提供包含在文件夾內(nèi)的所有文件夾的列表。 ·TextStream 對象,用來讀寫文本文件。
要使用FileSystemObject對象,先要創(chuàng)建它。創(chuàng)建FileSystemObject對象要使用CreatObject函數(shù)。CreateObject 函數(shù)用來創(chuàng)建并返回一個對 ActiveX 對象的引用。 語法:CreateObject(class,[servername]) class 參數(shù)使用 appname.objecttype 這種語法,包括以下部分: appname 必需的;提供該對象的應(yīng)用程序名。 因此,我們用下面的代碼創(chuàng)建FileSystemObject對象: Dim fso As Object Scripting是類型庫的名稱,F(xiàn)ileSystemObject就是要創(chuàng)建的對象的名字。 同樣我們可以創(chuàng)建Dictionary 對象如下:
FileSystemObject對象模型中有些功能是重復(fù)的,如可用FileSystemObject對象的CpoyFile方法,也可用File對象的Copy方法來復(fù)制文件。下面先介紹FileSystemObject對象的方法。 1、GetDrive 方法 語法:object.GetDrive drivespec drivespec參數(shù)可以是一個驅(qū)動器字符(c)、一個驅(qū)動器字符加一個冒號(c:)、一個驅(qū)動器字符加冒號和路徑分隔符(c:\)或任何網(wǎng)絡(luò)共享的說明(\\computer2\share1)。 作用:返回一個與指定路徑中的驅(qū)動器相對應(yīng)的 Drive 對象。 示例: 注意:為簡潔,示例中都假定fso是已經(jīng)創(chuàng)建的FileSystemObject對象 2、GetDriveName 方法 語法:object.GetDriveName(path) 作用:返回一個包含指定路徑的驅(qū)動器名字的字符串。 示例: 3、GetExtensionName 方法 語法:object.GetExtensionName(path) 作用:返回一個包含路徑中最后部件擴(kuò)展名的字符串。 示例: 4、GetBaseName 方法 語法:object.GetBaseName(path) 作用:返回一個包含路徑中最后部件的基本名字(去掉任何文件擴(kuò)展名)的字符串。 示例: 5、GetAbsolutePathName 方法 語法:object.GetAbsolutePathName(pathspec) 作用:從提供的路徑說明中返回一個完整、明確的路徑。 示例: Debug.Print fs.GetAbsolutePathName("") ‘顯示C:\Documents and Settings\yc\My Documents Debug.Print fs.GetAbsolutePathName("c:..") ‘顯示C:\Documents and Settings\yc,即上層目錄 Debug.Print fs.GetAbsolutePathName("abc") ‘顯示C:\Documents and Settings\yc\My Documents\abc Debug.Print fs.GetAbsolutePathName("c:\test.txt") ‘顯示C:\test.txt 6、GetFile 方法 語法:object.GetFile(filespec) 作用:返回一個和指定路徑中文件相對應(yīng)的 File 對象。 示例: 7、GetFileName 方法 語法:object.GetFileName(pathspec) 作用:返回指定路徑中的最后部件,該路徑不是驅(qū)動器說明的一部分。 示例: 8、GetFolder 方法 語法:object.GetFolder(folderspec) 作用:返回一個和指定路徑中文件夾相對應(yīng)的 Folder 對象。 示例: 9、GetSpecialFolder 方法 語法:object.GetSpecialFolder(folderspec) 作用:返回指定的特殊文件夾。 說明: WindowsFolder 0 Windows 文件夾,包含由 Windows 操作系統(tǒng)安裝的文件。 10、GetParentFolderName 方法 語法:object.GetParentFolderName(path) 作用:返回一個包含指定路徑最后部件父文件夾名字的字符串。 示例: 11、GetTempName 方法 語法:object.GetTempName 作用:返回一個隨機產(chǎn)生的臨時文件或文件夾的名字,該名字在執(zhí)行需要臨時文件或文件夾的操作時有用。 說明:GetTempName 方法不產(chǎn)生一個文件,它僅提供一個臨時文件名字,該名字可被 CreateTextFile 用于創(chuàng)建一個文件。 示例: 12、BuildPath 方法 語法:object.BuildPath(path, name) 作用:追加一個名字到一個已經(jīng)存在的路徑。 示例: 13、CreateFolder 方法 語法:object.CreateFolder(foldername) 作用:創(chuàng)建一個文件夾。 注意:如果指定的文件夾已經(jīng)存在,則發(fā)生一個錯誤。 示例: 14、CopyFolder 方法 語法:object.CopyFolder source, destination[, overwrite] 作用:復(fù)制一個文件夾到另一個地方。 說明: 例如:fso.CopyFolder "c:\mydocuments\letters\*", "c:\tempfolder\" 這是可以的。 ② 如果 source 包含通配符或 destination 以路徑分隔符(\)為結(jié)尾,則認(rèn)為 destination 是一個已存在的文件夾,在其中復(fù)制相匹配的文件夾和子文件夾。否則認(rèn)為 destination 是一個要創(chuàng)建的文件夾的名字。 例如:fso.copyfolder "c:\tmp", "f:\abc\" ③如果 destination 是一個已存在的文件,則發(fā)生一個錯誤。 ④如果 destination 是一個目錄,它將嘗試復(fù)制文件夾和它所有的內(nèi)容。如果一個包含在 source 的文件已在 destination 中存在,當(dāng) overwrite 為 False 時發(fā)生一個錯誤,否則它將嘗試覆蓋這個文件。 ⑤如果 destination 是一個只讀目錄,當(dāng)嘗試去復(fù)制一個已存在的只讀文件到此目錄并且 overwrite為 False 時,則發(fā)生一個錯誤。 ⑥如果 source 不存在或使用的通配符不能和任何文件夾匹配,也發(fā)生一個錯誤。 ⑦CopyFolder 方法停止在它遇到的第一個錯誤上,之前所做的操作是不會消失的,所以要注意。 15、MoveFolder 方法 語法:object.MoveFolder source, destination 作用:將一個或多個文件夾從一個地方移動到另一個地方。 說明: ②如果 source 包含通配符或 destination 以路徑分隔符 (\) 為結(jié)尾,則認(rèn)為 destination 指定了一個已存在的文件夾,在此文件夾中移動相匹配的文件。否則,認(rèn)為 destination 是一個要創(chuàng)建的目標(biāo)文件夾名字。這點與CopyFolder是一樣的。 ③如果 destination 是一個已存在的文件,則發(fā)生一個錯誤。 ④如果 destination 是一個目錄,則發(fā)生一個錯誤。 ⑤如果 source 不存在或使用的通配符不能和任何文件夾匹配,也發(fā)生一個錯誤。 ⑥MoveFolder 方法停止在它遇到的第一個錯誤上。不要嘗試回卷在錯誤發(fā)生前所做的任何改變。 16、DeleteFolder 方法 語法:object.DeleteFolder folderspec[, force] folderspec 必需的。要刪除的文件夾的名字。 Folderspec 可以在最后的路徑部件中包含通配符。 作用:刪除一個指定的文件夾和它的內(nèi)容。 說明:如果沒有發(fā)現(xiàn)相匹配的文件夾,則發(fā)生一個錯誤。DeleteFolder 方法停止在它遇到的第一個錯誤上,不要嘗試回卷或撤消錯誤發(fā)生前所做的任何改變。 示例: 17、FolderExists 方法 語法:object.FolderExists(folderspec) 作用:如果指定的文件夾存在返回 True,不存在返回 False。 18、DriveExists 方法 語法:object.DriveExists(drivespec) 作用:如果指定的驅(qū)動器存在,返回 True,如果不存在返回 False。 19、FileExists 方法 語法:object.FileExists(filespec) 作用:如果指定的文件存在,返回 True,若不存在,則返回 False。 20、CreateTextFile 方法 語法:object.CreateTextFile(filename[, overwrite[, unicode]]) overwrite 可選的。Boolean 值,表示一個已存在文件是否可被覆蓋。如果可被覆蓋其值為 True,其值為 False 時不能覆蓋。如果它被省略,則已存在文件不能覆蓋。 unicode 可選的。Boolean 值,表示文件是作為一個 Unicode 文件創(chuàng)建的還是作為一個ASCII 文件創(chuàng)建的。如果作為一個 Unicode 文件創(chuàng)建,其值為 True,作為一個 ASCII 文件創(chuàng)建,其值為 False。如果省略的話,則認(rèn)為是一個 ASCII 文件。 作用:創(chuàng)建一個指定的文件名并且返回一個用于該文件讀寫的 TextStream 對象。 示例: 21、OpenTextFile 方法 語法:object.OpenTextFile(filename[, iomode[, create[, format]]]) 作用:打開一個指定的文件并返回一個 TextStream 對象,該對象可用于對文件進(jìn)行讀、寫、追加操作。 說明: ForReading 1 打開一個只讀文件,不能對此文件進(jìn)行寫操作。 注意:在VBA幫助里是沒有ForWriting的,其實是有的,VBA幫助也是有錯誤的。另外,這些常數(shù)在使用前要先聲明,或者直接用數(shù)值。 ·create 可選的,它表示如果指定的 filename 不存在是否可以創(chuàng)建一個新文件。如果創(chuàng)建新文件,其值為 True。若不創(chuàng)建文件其值為 False。缺省值為 False。 ·Format 參數(shù)可為下面設(shè)置值中的任何值: TristateUseDefault –2 使用系統(tǒng)缺省打開文件。 示例: 22、CopyFile 方法 語法:object.CopyFile source, destination[, overwrite] 作用:把一個或多個文件從一個地方復(fù)制到另一個地方。 說明:需要注意的地方與CopyFolder是完全類似的。 示例: 23、MoveFile 方法 語法:object.MoveFile source, destination 作用:將一個或多個文件從一個地方移動到另一個地方。 說明:需要注意的地方與MoveFolder是完全類似的。 24、DeleteFile 方法 語法:object.DeleteFile filespec[, force] 作用:刪除一個指定的文件。 說明:force 可選的。如果要刪除具有只讀屬性設(shè)置的文件,其值為 True。如果其值為 False (缺?。瑒t不能刪除具有只讀屬性設(shè)置的文件。
(三)處理驅(qū)動器 可以利用Drive對象來獲取有關(guān)各種驅(qū)動器的信息,Drive對象的屬性有: TotalSize 屬性 驅(qū)動器的總?cè)萘浚宰止?jié)為單位。 這些屬性的使用都十分簡單,直接用“對象.屬性”就可以了。在使用前要先用GetDrive獲得一個Drive對象,注意不能創(chuàng)建一個驅(qū)動器對象。下面舉個例子: Sub ShowFreeSpace(drvPath) 利用Call ShowFreeSpace("c:"),即可獲得C盤的卷標(biāo)名和可用空間。 (四)處理文件夾 1、獲取文件夾的信息 可以利用Folder對象來獲取有關(guān)文件夾的信息,F(xiàn)older對象的屬性有: Attributes 屬性 文件夾的屬性??蔀橄铝兄抵械娜我庖粋€或任意的邏輯組合: 屬性的使用和Drive對象是一樣的,可以用GetFolder獲取一個Folder對象,也可以用FileSystemObject對象的CreateFolder 方法創(chuàng)建一個Folder對象。 2、Folder對象的方法 ⑴Copy 方法 語法:object.Copy destination[, overwrite] 作用:把一個指定的文件夾從一個地方復(fù)制到另一個地方。 說明:Copy 方法的作用與FileSystemObject對象的CopyFolder 方法是一樣的,不同在于后者可一次復(fù)制多個文件夾。 ⑵Move 方法 語法:object.Move destination 作用:將一個指定的文件夾從一個地方移動到另一個地方。 說明:Move 方法的作用與FileSystemObject.MoveFolder 是一樣的。不同在于后者可一次移動多個文件夾。 ⑶Delete 方法 語法:object.Delete force 作用:刪除一個指定的文件夾。 說明:Delete 方法的作用與FileSystemObject.DeleteFolder 是一樣的。 ⑷CreateTextFile 方法 語法:object.CreateTextFile(filename[, overwrite[, unicode]]) 作用:與FileSystemObject對象的CreateTextFile 方法是一樣的。 示例:
1、獲取文件的信息 可以利用File對象來獲取有關(guān)文件的信息,F(xiàn)ile對象的屬性和Folder的屬性是完全一樣的,只是少了Files 屬性、IsRootFolder 屬性、SubFolders 屬性這3個屬性。這里就不列了。 2、File對象的方法 ⑴Copy 方法 ⑵Move 方法 ⑶Delete 方法 以上三種方法與Folder的是完全類似的,語法也一樣,同樣也可用FileSystemObject對象相應(yīng)的方法代替。 ⑷OpenAsTextStream 方法 語法:object.OpenAsTextStream([iomode, [format]]) 作用:打開一個指定的文件并返回一個 TextStream 對象,該對象可用來對文件進(jìn)行讀、寫、追加操作。 說明:此方法與FileSystemObject對象的 OpenTextFile 方法相同的功能。參數(shù)也是一致的。
1、打開或創(chuàng)建文本文件 打開現(xiàn)有的文本文件,可以使用FileSystemObject對象的 OpenTextFile 方法或File對象的OpenAsTextStream 方法。 2、讀取文件 打開文件后,將返回一個TextStream 對象,我們可以利用TextStream 對象的屬性及方法來對文件進(jìn)行讀寫操作。 先看TextStream 對象的幾個屬性。 ·AtEndOfLine 屬性 文件指針是否正好在行尾標(biāo)記的前面 利用TextStream 對象讀取文件有三種方法。 ·Read 方法 語法:object.Read(characters) 功能:從一個 TextStream 文件中讀取指定數(shù)量的字符并返回得到的字符串。 示例: ·ReadLine 方法 語法:object.ReadLine 功能:從一個 TextStream 文件讀取一整行(到換行符但不包括換行符)并返回得到的字符串。 示例: ·ReadAll 方法 語法:object.ReadAll 功能:讀取整個的 TextStream 文件并返回得到的字符串。 說明:對于大的文件,使用ReadAll方法浪費內(nèi)存資源。應(yīng)使用其它的技術(shù)去輸入一個文件,比如按行讀取文件。 示例: 還有兩個輔助讀取的方法: ·Skip 方法 語法:object.Skip(characters) 功能:當(dāng)讀一個 TextStream 文件時跳過指定數(shù)量的字符。 示例: ·SkipLine 方法 語法:object.SkipLine 功能:當(dāng)讀一個 TextStream 文件時跳過下一行。
寫入數(shù)據(jù)到文件也有三種方法。 ·Write 方法 語法:object.Write(string) 功能:寫一個指定的字符串到一個 TextStream 文件。 示例: ·WriteLine 方法 語法:object.WriteLine([string]) 功能:寫入一個指定的字符串和換行符到一個 TextStream 文件中。 示例: ·WriteBlankLines 方法 語法:object.WriteBlankLines(lines) 功能:寫入指定數(shù)量的換行符到一個 TextStream 文件中。 示例: 4、關(guān)閉文件 利用TextStream 對象的Close方法,上面的示例中已經(jīng)有了,很簡單。
從上面的介紹,我們看到使用FileSystemObject對象處理文件、文件夾比使用VBA語句的方法具有更容易存在的特點。這是因為FileSystemObject對象使用了面向?qū)ο蟮恼Z法。另外FileSystemObject對象處理文本文件毫不遜色于VBA語句,非常值得推薦。唯一的問題是不能處理二進(jìn)制文件,微軟在有關(guān)文檔中稱計劃將來支持二進(jìn)制文件,不過應(yīng)該只是計劃而已,呵呵。
之四
四、利用API函數(shù)來處理文件 通過前面三種方法的介紹,你是否已經(jīng)覺得足夠了?是的,前面的方法完全可以應(yīng)付幾乎所有的文件操作。但是為了普及一下API,展示一下API的魅力,最后向大家介紹一下如何利用API函數(shù)來處理文件。另一方面也是本人對API情有獨鐘,為她做一下廣告,呵呵。 大家對API的強大也是有所耳聞了,在文件操作方面,API自然毫不遜色。 (一)處理驅(qū)動器及目錄 下面是windows中提供的對于目錄進(jìn)行操作的API函數(shù)及其功能: CreateDirectory,CreateDirectoryEx 創(chuàng)建一個新目錄 下面通過幾個例子來詳細(xì)的了解一下其中主要的幾個函數(shù)及其用法: 1、GetLogicalDrives 作用:判斷系統(tǒng)中存在哪些邏輯驅(qū)動器字母 聲明:Declare Function GetLogicalDrives Lib "kernel32" Alias "GetLogicalDrives" () As Long 說明:此函數(shù)的返回值類型為Long,這個結(jié)構(gòu)中的二進(jìn)制位標(biāo)志著存在哪些驅(qū)動器。其中,位0設(shè)為1表示驅(qū)動器A:存在于系統(tǒng)中;位1設(shè)為1表示存在B:驅(qū)動器;以次類推 示例: 上面的示例中,我們通過二進(jìn)制運算,將返回值轉(zhuǎn)換成字符。如果你的機上有C,D,E,F,G,H這幾個驅(qū)動器,那么LDs的值就是252,轉(zhuǎn)成二進(jìn)制為11111100,從右往左,依次代表A,B,C,D,...,為0的說明沒有此驅(qū)動器字母。大家可以自己試一試。 2、GetDriveType 作用:判斷一個磁盤驅(qū)動器的類型 聲明:Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long 說明:此函數(shù)的返回值類型為Long,如驅(qū)動器不能識別,則返回零。如指定的目錄不存在,則返回1。如執(zhí)行成功,則用下述任何一個常數(shù)指定驅(qū)動器類型:DRIVE_REMOVABLE(表示磁盤可以從驅(qū)動器上移走,通常是軟驅(qū)), DRIVE_FIXED(磁盤不能從驅(qū)動器上移走,通常為本地硬盤), DRIVE_REMOTE(驅(qū)動器是遠(yuǎn)程網(wǎng)絡(luò)驅(qū)動器), DRIVE_CDROM(驅(qū)動器是CD-ROM驅(qū)動器) 或 DRIVE_RAMDISK(驅(qū)動器是RAM驅(qū)動器) 示例: Private Const DRIVE_CDROM = 5 ‘表示光盤驅(qū)動器
3、GetDiskFreeSpaceEx 作用:獲取與一個磁盤的組織以及剩余空間容量有關(guān)的信息 聲明:Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpRootPathName As String, lpFreeBytesAvailableToCaller As LARGE_INTEGER, lpTotalNumberOfBytes As LARGE_INTEGER, lpTotalNumberOfFreeBytes As LARGE_INTEGER) As Long 說明:此函數(shù)的返回值類型為Long,非零表示成功,零表示失敗。會設(shè)置GetLastError. 在采用FAT16格式的windows95系統(tǒng)中,如一個驅(qū)動器(分區(qū))的容量超過了2GB,則不應(yīng)使用這個函數(shù)。此時,這個函數(shù)能識別的最大分區(qū)容量只有2GB 參數(shù)說明: LARGE_INTEGER結(jié)構(gòu)用來代表一個64位帶符號的整數(shù)值,它的定義如下: Type LARGE_INTEGER ‘ 8 Bytes 其中l(wèi)owpart為 Long,指定低32位,highpart 為 Long,指定高32位。 示例:雖然此函數(shù)能識別的最大分區(qū)容量只有2GB,但通過調(diào)整,對大于2G的仍然能得出正確容量。以下的調(diào)整公式是本人通過逆向推算出來的,至于其中的原理也不是很清楚,大家可一測試一下。 Private Sub Get_DiskFreeSpaceEx() RootPathName = "d:" Dms = Dms + "磁盤容量:" + vbCrLf ‘取得磁盤可用空間 Dms = Dms + "磁盤可用空間:" + vbCrLf ‘取得磁盤已用空間 Dms = Dms + "磁盤已用空間:" + vbCrLf Dms = Dms + CStr(tempc) + "G" + vbCrLf MsgBox Dms 4、CreateDirectory, CreateDirectoryEx 作用:創(chuàng)建一個新目錄 聲明: Declare Function CreateDirectoryEx& Lib "kernel32" Alias "CreateDirectoryExA" (ByVal lpTemplateDirectory As String, ByVal lpNewDirectory As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) 說明:此函數(shù)的返回值類型為Long,非零表示成功,零表示失敗。會設(shè)置GetLastError 參數(shù)說明: 示例: 5、RemoveDirectory 作用:移除一個目錄 聲明:Declare Function RemoveDirectory Lib "kernel32" Alias "RemoveDirectoryA" (ByVal lpPathName As String) As Long 說明:此函數(shù)的返回值類型為Long,非零表示成功,零表示失敗。會設(shè)置GetLastError. 參數(shù)說明: 示例: 6、SetCurrentDirectory 作用:設(shè)置當(dāng)前目錄,與VBA語句ChDir類似。 聲明:Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long 說明:此函數(shù)的返回值類型為Long,非零表示成功,零表示失敗。會設(shè)置GetLastError 參數(shù)說明: 示例: 7、GetSystemDirectory 作用:這個函數(shù)能取得Windows系統(tǒng)目錄(System目錄)的完整路徑名。在這個目錄中,包含了所有必要的系統(tǒng)文件。根據(jù)微軟的標(biāo)準(zhǔn),其他定制控件和一些共享組件也可放到這個目錄。通常應(yīng)避免在這個目錄里創(chuàng)建文件。在網(wǎng)絡(luò)環(huán)境中,往往需要管理員權(quán)限才可對這個目錄進(jìn)行寫操作 聲明:Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long 說明:此函數(shù)的返回值類型為Long,裝載到lpBuffer緩沖區(qū)的字符數(shù)量。如lpBuffer不夠大,不能容下文件名,則返回要求的緩沖區(qū)長度 參數(shù)說明: 示例: (二)處理文件
下面是windows中提供的對于文件進(jìn)行操作的API函數(shù)及其功能: CloseHandle 關(guān)閉一個內(nèi)核對象。其中包括文件、文件映射、進(jìn)程、線程、安全和同步對象等。
LZOpenFile 打開壓縮文件以讀取
1、CreateFile 作用:這是一個全功能的例程,可打開和創(chuàng)建文件、管道、郵槽、通信服務(wù)、設(shè)備以及控制臺 聲明: 說明: 打開一個通信端口時(如COM1),無論如何都要設(shè)置成 OPEN_EXISTING。 這個函數(shù)代替了lOpen 和 lCreate函數(shù),應(yīng)該是我們的首選 參數(shù)說明: ·lpFileName String,要打開的文件的名字 ·dwFlagsAndAttributes 示例如下: lngHandle = CreateFile("c:\text.txt", GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_ALWAYS, 0, 0) ‘上面代碼以寫方法打開文件,如文件不存在則創(chuàng)建它。 2、lcreat 作用:創(chuàng)建一個文件。如文件已經(jīng)存在,就會將其縮短成零長度,并將其打開,以便讀寫 聲明:Declare Function lcreat Lib "kernel32" Alias "_lcreat" (ByVal lpPathName As String, ByVal iAttribute As Long) As Long 說明:此函數(shù)的返回值類型為Long,如執(zhí)行成功,返回打開文件的句柄。如果出錯,則返回HFILE_ERROR 該函數(shù)會打開已由其他應(yīng)用程序打開的文件,所以使用它時要小心。win32的CreateFile函數(shù)已取代了這個函數(shù)。這個函數(shù)與vb的open語句作用相同 參數(shù)說明: lpPathName String,欲創(chuàng)建的文件的名字 0——文件能夠讀寫 lcreat “c:\test.txt”,0 3、lopen 作用:以二進(jìn)制模式打開指定的文件 聲明:Declare Function lopen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long 說明:此函數(shù)的返回值類型為Long,如執(zhí)行成功,返回打開文件的句柄。HFILE_ERROR表示出錯。會設(shè)置GetLastError 參數(shù)說明: lpPathName String,欲打開文件的名字 示例: 4、GetFileTime 作用:取得指定文件的時間信息 聲明:Declare Function GetFileTime Lib "kernel32" Alias "GetFileTime" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long 說明:Long,非零表示成功,零表示失敗。會設(shè)置GetLastError 如果不需要特定的信息,那么lpCreationTime,lpLastAccessTime,lpLastWriteTime都可以設(shè)置為零(用ByVal As Long)。這個函數(shù)返回的文件時間采用UTC格式 參數(shù)說明: 示例: Dim file As Long str1 = "c:\text.txt" 以上代碼獲取的時間信息是Long型的,還需要時間轉(zhuǎn)換函數(shù)進(jìn)行轉(zhuǎn)換,完整的示例見附件。 5、CopyFile 作用:復(fù)制文件。與vb的filecopy命令相似 聲明:Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long 說明:Long,非零表示成功,零表示失敗。會設(shè)置GetLastError 參數(shù)說明: lpExistingFileName String,源文件名
以上代碼將c:\test1.txt 拷貝到c:\test2.txt,完整的示例見附件。 6、MoveFile, MoveFileEx 作用:移動文件。如dwFlags設(shè)為零,則MoveFile完全等價于MoveFileEx 聲明: Declare Function MoveFileEx Lib "kernel32" Alias "MoveFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal dwFlags As Long) 說明:Long,非零表示成功,零表示失敗。會設(shè)置GetLastError 這兩個函數(shù)通常不能將文件從一個卷移動到另一個卷。但如設(shè)置了MOVEFILE_COPY_ALLOWED標(biāo)記,MoveFileEx可以做到這一點. 參數(shù)說明: lpExistingFileName String,欲移動的文件名 示例: MoveFile "c:\test.txt", "d:\test1.txt" ‘移動文件 以上代碼實現(xiàn)了文件的移動,兩次移動後,文件不變 7、DeleteFile 作用:刪除指定文件 聲明:Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long 說明:Long,非零表示成功,零表示失敗。會設(shè)置GetLastError 與vba的kill語句相似,在windows 95下使用這個函數(shù)要小心——即使文件當(dāng)前正由一個應(yīng)用程序打開,該函數(shù)也會將其刪除. 參數(shù)說明: 示例: DeleteFile "c:\test.txt" ‘刪除c:\test.txt文件 完整的示例見附件。 8、ReadFile 作用:從文件中讀出數(shù)據(jù)。與lread函數(shù)相比,這個函數(shù)要明顯靈活的多。該函數(shù)能夠操作通信設(shè)備、管道、套接字以及郵槽 聲明:Private Declare Function ReadFile Lib "kernel32" Alias "ReadFile" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As OVERLAPPED) As Long 說明:Long,非零表示成功,零表示失敗。會設(shè)置GetLastError。如啟動的是一次異步讀操作,則函數(shù)會返回零值,并將ERROR_IO_PENDING設(shè)置成GetLastError的結(jié)果。如結(jié)果不是零值,但讀入的字節(jié)數(shù)小于nNumberOfBytesToRead參數(shù)指定的值,表明早已抵達(dá)了文件的結(jié)尾 參數(shù): 示例:完整的示例見附件。 9、WriteFile 作用:將數(shù)據(jù)寫入一個文件。該函數(shù)比lwrite函數(shù)要靈活的多。也可將這個函數(shù)應(yīng)用于對通信設(shè)備、管道、套接字以及郵槽的處理 聲明:Declare Function WriteFile Lib "kernel32" Alias "WriteFile" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As OVERLAPPED) As Long 說明:Long,TRUE(非零)表示成功,否則返回零。會設(shè)置GetLastError 參數(shù): lpNumberOfBytesWritten - Long,實際寫入文件的字節(jié)數(shù)量 lpOverlapped --- OVERLAPPED,倘若在指定FILE_FLAG_OVERLAPPED的前提下打開文件,這個參數(shù)就必須引用一個特殊的結(jié)構(gòu)。那個結(jié)構(gòu)定義了一次異步寫操作。否則,該參數(shù)應(yīng)置為空(將聲明變?yōu)锽yVal As Long,并傳遞零值) 示例:完整的示例見附件。
作用:此函數(shù)的功能很強大,能對文件或文件夾進(jìn)行復(fù)制、移動、重命名、刪除的全部操作。 聲明:Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long 說明:Long,TRUE(非零)表示成功,否則返回零。 參數(shù): 示例:見附件。
通過以上的介紹,我們可以看到API在文件操作方面功能十分強大,能夠完成一些前面方法所不能完成的任務(wù)。FileSystemObject對象模型的內(nèi)部可能就是用API寫的,即便不是我們也可以用API寫出一個FSO類來。API是一個巨大的寶庫,當(dāng)你為實現(xiàn)某個功能而愁眉不展的時候,查查API可能就能找到滿意的答案。 寫的這么多,希望對大家有所幫助,至少操作文件是沒有什么問題了。 |
|