欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
談vb目錄文件操作的三種方法


對于程序,無(wú)論大到一個(gè)操作系統,小到一個(gè)單一功能的應用軟件來(lái)說(shuō),很多時(shí)候,我們都要將一些數據記錄和存儲到磁盤(pán)中.可見(jiàn),對目錄和文件的操作是多么的重要.下面我們就和大家一起學(xué)習一下vb中可以應用的三種方法:1、使用現成的控件2、使用visualbasic中提供的方法3、使用windows提供的應用程序編程接口(api)。下面我們具體看看這些方法。

第一部分   目錄操作

一、使用現成控件

(一) 察看和顯示目錄下的文件和文件夾

對于這個(gè)實(shí)現,其實(shí)很簡(jiǎn)單。首先想到的就是vb中給我們提供的現成的控件。主要

有這么兩類(lèi):一類(lèi)是驅動(dòng)器列表框(DriveListBox)、目錄列表框(DirListBox)和文件列表框(FileListBox)三個(gè)控件組合而成的自定義對話(huà)框;另一類(lèi)是windows提供的標準對話(huà)框。

他們在工具箱中的位置和圖標如下所示:

    1、驅動(dòng)器列表框是一個(gè)下拉式的列表框,他和一般下拉式的列表框的不同僅在于功能上的不同,它提供了一個(gè)驅動(dòng)器的列表。當單擊右邊的箭頭時(shí),則彈出計算機中的所有驅動(dòng)器的下拉列表。默認狀態(tài)下,在驅動(dòng)器列表中顯示的是當前驅動(dòng)器,我們可以輸入或從下拉列表中選擇有效的驅動(dòng)器標示符.

 

下面是它的主要屬性,事件和方法.

屬性

Drive

本屬性用于返回或設置運行時(shí)選擇的驅動(dòng)器.默認值為當前驅動(dòng)器

改變Drive屬性會(huì )觸發(fā)Change事件. 

示例:  Drive1.Drive = “c:\” 

設置C盤(pán)為當前驅動(dòng)器.

事件

Change

當選擇一個(gè)新驅動(dòng)器或通過(guò)代碼改變了Drive屬性時(shí)觸發(fā)該事件

下面是示例代碼:

   Private Sub Drive1_Change()

         Dir1.Path = Drive1.Drive 

 ‘當選擇一個(gè)新驅動(dòng)器時(shí),將驅動(dòng)器列表中選中的當前驅動(dòng)器,賦給目錄列表的路徑.

   End Sub

2、目錄列表框

目錄列表框用于顯示當前驅動(dòng)器的目錄結構,目錄列表框從最高層目錄開(kāi)始,顯示當前驅動(dòng)器的目錄結構,并按層次關(guān)系縮進(jìn)跟目錄下的所有子目錄。下面是它的主要屬性,方法和事件:

屬性

Path

本屬性用于返回或設置運行時(shí)選擇的路徑,默認路徑為當前路徑.改變Dri屬性會(huì )觸發(fā)Change事件. 

示例:  Dri1.Path = Drive1.Drive 

設置在驅動(dòng)器列表框中選中的驅動(dòng)器盤(pán)符為目錄列表的當前路徑.

ListIndex

本屬性用來(lái)返回或設置控件中當前被選擇的項目索引號.目錄列表框中的每一個(gè)目錄都可以通過(guò)ListIndex屬性來(lái)標識.由Path屬性所設置的當前目錄的ListIndex屬性值總是-1,而它上面的目錄的ListIndex屬性值為-2,再上面的為-3,以此類(lèi)推;而它所包含的子目錄恰恰相反,緊挨著(zhù)的第一個(gè)子目錄的ListIndex屬性值為0,往下一次加一.


ListCount

本屬性返回當前目錄下的所有子目錄書(shū).ListCount的值比最大的ListIndex的值大1.

事件

Change

當選擇一個(gè)新目錄或通過(guò)代碼改變了Path屬性時(shí)觸發(fā)該事件

下面是示例代碼:

Private Sub Dir1_Change()

'將文件列表框的路徑值,設置為目錄列表框所選中的路徑值

File1.Path = Dir1.Path

End Sub

3、文件列表框

文件列表框用來(lái)顯示當前目錄中的部分或者全部文件.文件列表框的大部分屬性和一般的列表框相同,都具有大小,位置,字體,顏色等以及List,ListCount,ListIndex等屬性.下面是主要的屬性:

屬性

Path

本屬性用于返回或設置運行時(shí)選擇的路徑以顯示其下的文件,默認路徑為當前路徑.改變Dri屬性會(huì )觸發(fā)PathChange事件. 

示例: File1.Path= Dri1.Path  

設置在目錄列表框中選中的路徑為文件列表的當前路徑.

Pattern

本屬性用來(lái)確定程序運行時(shí),列表框中顯示那些類(lèi)型的文件.除了使用”*” ”?”等通配符外,在參數中還可以使用分號”;”來(lái)分割多種文件類(lèi)型.例如:”*.ext;*.bat”


FileName

本屬性返回或設置所選文件的路徑和文件名.可以從本屬性值中返回當前列表中選擇的文件名.路徑可用Path屬性單獨檢索.在功能上,本屬性值與ListIndex等價(jià).如果沒(méi)有文件被選中,FileName屬性將返回0長(cháng)度的字符串.改變甭屬性值可能會(huì )產(chǎn)生一個(gè)或多個(gè)如下事件:PathChange(如果改變路徑),PatternChange(如果改變模式),DblClick(如果指定存在的文件)

事件

Click

當選擇一個(gè)新的文件時(shí)觸發(fā)該事件

下面是示例代碼:

Private Sub File1_Click()

    Picture1.Picture = LoadPicture(Dir1.Path & " \ " & File1.FileName)

‘在圖片框中顯示選定的圖形文件.

End Sub

4、標準對話(huà)框

CommonDialog控件提供了一組標準的操作對話(huà)框,進(jìn)行諸如打開(kāi),和保存文件,設置打印選項,以及選擇顏色和字體等操作.通過(guò)運行windows幫助引擎還能顯示幫助.

CommonDialog控件在visual basic和Microsoft Windows動(dòng)態(tài)鏈接庫commdlg.dll的例程之間提供了一個(gè)接口.為了用這個(gè)控件創(chuàng )建一個(gè)對話(huà)框,commdlg.dll必須存在于microsoft Windows的system目錄下.然后再visual basic中選擇工程/部件,并在顯示的部件對話(huà)框中選中Microsoft common Dialog Control 6.0,確定后,在工具欄里就顯示了出來(lái).如下圖所示:

在應用程序中要使用CommonDialog控件,可將其添加到窗體中并設置其屬性.控件所顯示的對話(huà)框有控件的方法確定.在運行時(shí),當相應的方法被調用時(shí),將顯示一個(gè)對話(huà)框或是執行幫助引擎;在設計時(shí),CommonDialog 控件是以圖標的形式顯示在窗體中的.該圖標的大小不能改變.

使用指定的方法,CommonDialog控件能夠顯示下列對話(huà)框:

方法

所顯示的對話(huà)框

ShowOpen

ShowSave

ShowColor

ShowFont

ShowPrinter

Showhelp

顯示[打開(kāi)]對話(huà)框

顯示[另存為]對話(huà)框

顯示[顏色]對話(huà)框

顯示[字體]對話(huà)框

顯示[打印]或[打印選項]對話(huà)框

顯示windows幫助引擎

下面是它的主要屬性,方法:

屬性

Filer

該屬性應用于CommonDialog控件中的[打開(kāi)][另存為]對話(huà)框.本屬性用來(lái)返回或設置在對話(huà)框[類(lèi)型]列表框中顯示的過(guò)濾器.過(guò)濾的作用是確定對話(huà)框中文件列表框中顯示的文件類(lèi)型.例如:設置為*.txt時(shí),將顯示文本文件.要顯示多種類(lèi)型的文件,可以用管道(|)符號(ASCII124)將他們分開(kāi).管道符號前后不能加空格.如:*.rm|*.rmvb

Action

該屬性返回或設置一個(gè)表示所顯示對話(huà)框類(lèi)型的整數.具體如下.


設置數值

說(shuō)明


0

1

2

3

4

5

6

沒(méi)有操作

顯示[打開(kāi)]對話(huà)框

顯示[另存為]對話(huà)框

顯示[顏色]對話(huà)框

顯示[字體]對話(huà)框

顯示[打印]或[打印選項]對話(huà)框

運行WINHLP32.EXE


FileName

本屬性應用于CommonDialog控件的[打開(kāi)][另存為]對話(huà)框.

本屬性返回或設置所選文件的路徑和文件名.如果在運行時(shí)被創(chuàng )建,FileName屬性將返回0長(cháng)度的字符串,表示當前沒(méi)有選擇文件.在CommonDialog控件里,可以在打開(kāi)對話(huà)框之前設置FileName屬性來(lái)設定初始文件名.

可以從本屬性值中返回當前列表中選擇的文件名.路徑可用Path屬性單獨檢索.在功能上,本屬性值與ListIndex等價(jià).如果沒(méi)有文件被選中,FileName屬性將返回0長(cháng)度的字符串.

改變甭屬性值可能會(huì )產(chǎn)生一個(gè)或多個(gè)如下事件:PathChange(如果改變路徑),PatternChange(如果改變模式),DblClick(如果指定存在的文件)


事件

Click

當選擇一個(gè)新的文件時(shí)觸發(fā)該事件

下面是一個(gè)例子:

我們在這里要做一個(gè)vcd的播放器下面是界面.

下表是其中所用到的控件及其屬性設置:

對象

特性

設置值

窗體

名稱(chēng)

Frmvcd

BorderStyle

1

Caption

Vcd播放器

菜單

標題

文件

名稱(chēng)

Mnufile

標題

打開(kāi)


名稱(chēng)

Mnuopen


標題

播放


名稱(chēng)

Mnuplay


標題

退出


名稱(chēng)

Mnuexit


標題

選項

名稱(chēng)

Mnuoption


標題

連續播放


名稱(chēng)

Mnurepeat


標題

靜音


名稱(chēng)

Mnuslient


多媒體控件

名稱(chēng)

Mmcontrol

Picture控件

名稱(chēng)

Picture1

通用對話(huà)框

名稱(chēng)

Commondialog1

下面是主要程序代碼代碼:

Private Sub mnuopen_Click()  ’當點(diǎn)擊菜單中的打開(kāi)時(shí)執行

'在未選擇文件時(shí),文件名為空字符,播放菜單不可用

mnuplay.Enabled =False

CommonDialog1.FileName = ""

'下面語(yǔ)句設置文件過(guò)濾方式,可顯示擴展名為avi,dat,wav和mid文件

CommonDialog1.Filter = "(*.avi)|*.avi|(*.wave)|*.wav|(vcd *.dat)|*.dat|(midi *.mid)|*.mid"

'初始化文件過(guò)濾方式為*.avi

CommonDialog1.FilterIndex = 1

'建立打開(kāi)方式的通用對話(huà)框,也可使用commondialog1.showopen

CommonDialog1.Action = 1

'打開(kāi)一個(gè)文件前先關(guān)閉前一次被打開(kāi)的多媒體設備

MMControl1.Command = "close"

Select Case CommonDialog1.FilterIndex

    Case 1  '選擇*.avi

       '設置多媒體設備類(lèi)型為avividio

       MMControl1.DeviceType = "avividio"

       '設置時(shí)間格式為幀

       MMControl1.TimeFormat = 3

       '設置播放的文件為通用對話(huà)框中選擇的文件

        MMControl1.FileName = CommonDialog1.FileName

       '打開(kāi)文件

        MMControl1.Command = "open "

    Case 2 '選擇*.wav

       '設置多媒體設備類(lèi)型為waveaudio

       MMControl1.DeviceType = "waveaudio"

      '設置時(shí)間格式為幀

      MMControl1.TimeFormat = 3

      '設置播放的文件為通用對話(huà)框中選擇的文件

       MMControl1.FileName = CommonDialog1.FileName

      '打開(kāi)文件

       MMControl1.Command = "open "

    Case 3  '選擇*.dat

        '設置多媒體設備類(lèi)型為Mpegvidio

        MMControl1.DeviceType = "Mpegvidio"

       '設置時(shí)間格式為幀

       MMControl1.TimeFormat = 3

       '設置播放的文件為通用對話(huà)框中選擇的文件

       MMControl1.FileName = CommonDialog1.FileName

       '打開(kāi)文件

       MMControl1.Command = "open "

    Case 4  '選擇*.mid

       '設置多媒體設備類(lèi)型為waveaudio

       MMControl1.DeviceType = "waveaudio"

       '設置時(shí)間格式為幀

       MMControl1.TimeFormat = 3

       '設置播放的文件為通用對話(huà)框中選擇的文件

       MMControl1.FileName = CommonDialog1.FileName

       '打開(kāi)文件

       MMControl1.Command = "open "

End Select

'設置hwnddisplay的值,使媒體文件能夠在picture控件中播放

MMControl1.hWndDisplay = Picture1.hWnd

End Sub

(二)新建、修改、刪除目錄

以上控件除了通用對話(huà)框(CommonDialog)之外一般只能顯示當前的目錄結構,對于在磁盤(pán)上新建、修改、刪除目錄卻基本無(wú)能為力。

我們先來(lái)看看通用對話(huà)框對文件夾的新建,修改和刪除操作.

1、新建目錄

我們只要在顯示出來(lái)的通用對話(huà)框的空白位置,單擊鼠標,選擇“新建”即可在指定的路徑下創(chuàng )建新的目錄,或者點(diǎn)擊通用對話(huà)框右上角的新建圖表(如下圖所示),也可以在指定的路徑下創(chuàng )建新的目錄

2、修改文件夾名稱(chēng)

可以在顯示出來(lái)的通用對話(huà)框中,用鼠標右鍵點(diǎn)擊選擇所要修改的文件夾,再彈出的快捷菜單中,選擇重命名,即可修改目錄名稱(chēng)。如下圖所示:

3、刪除文件夾

同修改文件夾名稱(chēng)一樣,我們只要選擇刪除即可。如上圖所示。

而且這種方法比RmDir更簡(jiǎn)便,它還可以刪除包含有文件和子文件夾的文件夾。

除了以上控件,windows還給我們提供了一個(gè)叫做FileSystemObject(簡(jiǎn)稱(chēng)FSO)對象。FSO對象模型中包括了計算機文件系統所有的對象。見(jiàn)下表。利用這些對象可以更方便的操作文件系統。

對象

功能

Drive

允許收集系統的驅動(dòng)器信息,諸如驅動(dòng)器的可用空間

Folder

允許創(chuàng )建、刪除或移動(dòng)文件夾,并向系統查詢(xún)文件夾的名稱(chēng)、路徑等等

Files

允許創(chuàng )建、刪除或移動(dòng)文件,并向系統查詢(xún)文件的名稱(chēng)、路徑等等

FileSysterObject

此為主要對象,提供一整套用于創(chuàng )建、刪除、搜集相關(guān)信息,以及通常的操作驅動(dòng)器,文件夾,和文件的方法。

TextStream

允許讀寫(xiě)文本文件

下面我們一起來(lái)看看怎樣用FSO對象來(lái)顯示、新建、修改以及刪除目錄。

FSO對象模型包含在Scripting的類(lèi)型庫中,此類(lèi)型庫存在于Scrrun.dll文件中.使用FSO對象模型,首先要建立一個(gè)FileSystemObject對象.有兩種方法可以實(shí)現.一種是從”工程”菜單中的”引用”對話(huà)框選擇”Microsoft Scripting Runtime”項,然后在代碼窗口中聲明一個(gè)FileSystemObject類(lèi)型的變量.語(yǔ)句如下:

Dim fso As New FileSystemObject

另一種方法是在代碼中使用CreatObject方法動(dòng)態(tài)的創(chuàng )建一個(gè)FileSystemObject對象.語(yǔ)句如下:

Dim fso As  Object ‘ 聲明對象變量

Set fso = CreatObject(“Scripting. FileSystemObject”)  ‘創(chuàng )建FSO對象

我們具體看看FileSystemObject的主要屬性.

1、驅動(dòng)器

(1) Drives屬性是FileSystemObject對象的唯一屬性,它返回Drives集合中所有可用驅動(dòng)器的只讀集合。對于可刪除的驅動(dòng)器,不需要將媒體插入其中,就可以在Drives集合中顯示出來(lái)。下面是它的主要屬性有兩個(gè):一個(gè)是Count,另一個(gè)是Item.Count屬性返回Drives集合或Dictionary對象中的條目數.Item屬性用來(lái)返回或設置Drives集合或Dictionary對象中與指定關(guān)鍵字相關(guān)的項目.

下面代碼說(shuō)明了如何獲得Drives集合,以及如何用For Eacn……Next語(yǔ)句來(lái)訪(fǎng)問(wèn)該集合中的每個(gè)Drive:

  Sub ShowDriveList()

Dim fs As Object, d, dc, s,n 

‘創(chuàng )建文件系統對象

Set fs = CreatObject(“Scripting. FileSystemObject”)

‘創(chuàng )建驅動(dòng)器集合

Set dc= fs.Drives

‘取的驅動(dòng)器對象

For Each d in dc

   s = s & d.DriveLetter & “-” ‘格式化文本

   If d.DriverType = Remote Then   ‘如果是Remote類(lèi)型的驅動(dòng)器

      n = d.ShareName        ‘取得它的共享名

   Else

      n = d.volumeName     ‘否則取得它的卷標

   End if

   s= s& n & vbCrLf      ‘格式化文本

Next

MsgBox s          ‘顯示文本

End sub

(2) 當然我們也可以用Drive對象.Drive對象提供了對磁盤(pán)驅動(dòng)器或網(wǎng)絡(luò )共享屬性的訪(fǎng)問(wèn)方法.下面是它的主要屬性及其解釋:

Availablespace

驅動(dòng)器已用空間

DriveLetter

驅動(dòng)器指定的字母

Freespace

驅動(dòng)器剩余空間

DriverType

驅動(dòng)器類(lèi)型

TotalSize

驅動(dòng)器全部空間

FileSystem

驅動(dòng)器文件系統

IsReady

驅動(dòng)器是否已準備

Path

驅動(dòng)器根目錄

SerizlNumber

驅動(dòng)器序列號

VolumeName

驅動(dòng)器卷標

ShareName

驅動(dòng)器共享名

主要的方法就是GetDrive,此方法用來(lái)訪(fǎng)問(wèn)一個(gè)已有的驅動(dòng)器,該方法返回一個(gè)與指定路徑中的驅動(dòng)器相對應的Drive對象。下面的代碼中,我們將說(shuō)明怎樣取得一個(gè)指定的驅動(dòng)器的相關(guān)信息:

Sub ShowFreeSpace(drvPath)     ‘顯示指定目錄下的驅動(dòng)器的信息

  Dim fs As Object, d, s     

  Set fs = CreateObject("Scripting.FileSystemObject") ‘創(chuàng )建文件系統對象

  Set d = fs.GetDrive(fs.GetDriveName(drvPath))  ‘創(chuàng )建并得到指定取目錄下的驅動(dòng)器

  s = "Drive" & UCase(drvPath) & "-"   ‘格式化文本

  s = s & d.VolumeName & vbCrLf   ‘得到驅動(dòng)器的卷標

  s = s & "FreeSpace:" & FormatNumber(d.FreeSpace / 1024, 0) 

‘計算驅動(dòng)器的剩余磁盤(pán)空間

  s = s & "Kbytes"

  MsgBox s    ‘顯示

  End Sub

下面是filesystemobject的其他方法

CreateFolder

該方法的作用是創(chuàng )建一個(gè)文件夾。所要創(chuàng )建的文件夾必須是不存在的,否則出錯。

CreateTextFile

該方法的作用是產(chǎn)生一個(gè)指定的文件名,并返回一個(gè)TextStream對象,該對象可被用于對指定的文件進(jìn)行讀寫(xiě)。如果overwrite參數為False或未指定,對于一個(gè)已存在的文件,將產(chǎn)生錯誤。

DeleteFile

該方法的作用是刪除一個(gè)指定的文件。如果指定的文件不存在,則出錯。

DeleteFolder

該方法的作用是刪除一個(gè)文件夾及其內容。如果沒(méi)有發(fā)現匹配的文件夾則出錯。該方法不能確定文件夾中是否包含內容。

DriveExists

該方法的作用是用來(lái)確定驅動(dòng)器是否存在。如果指定的驅動(dòng)器存在,則返回True,否則返回False。但對于可刪除介質(zhì)的驅動(dòng)器,即使沒(méi)有介質(zhì)存在,DriveExists方法也返回True,因此最好使用IsReady屬性確定驅動(dòng)器是否準備就緒。

FileExists

該方法的作用是判斷指定的文件對象是否存在于當前文件夾

FolderExists

該方法的作用是判斷指定的文件夾對象是否存在于當前文件夾

GetDrive

該方法的作用是返回一個(gè)在指定路徑中的與某個(gè)驅動(dòng)器相對應的Drive對象。對于網(wǎng)絡(luò )驅動(dòng)器,將首先檢查該共享是否存在。

GerDriveName

該方法的作用是返回包括某一指定路徑上的驅動(dòng)器名的字符串。如果驅動(dòng)器不能確定,則返回一個(gè)0長(cháng)度字符串。該方法只對指定的路徑起作用,它并不試圖解析路徑,也不檢查指定路徑是否存在。

GetExtensionName

該方法的作用是返回指定路徑中最后一個(gè)組成部分的擴展名。

GetFile

該方法的作用是返回指定路徑中與某一文件相關(guān)的File對象。一定要保證所指定的文件是實(shí)際存在的。否則將產(chǎn)生錯誤。

GetFileName

該方法的作用是返回指定路徑的最后一個(gè)組成部分的文件名。

GetFolder

該方法的作用是返回指定路徑上的與某個(gè)文件夾相關(guān)的Folder對象.要保證指定的文件夾是實(shí)際存在的,否則會(huì )出錯. 使用Folder對象的第一部就是先用FileSystemObjectd的GetFolder方法得到Folder對象

GetParentFolderName

該方法的作用是返回一個(gè)包含指定路徑上的最后一個(gè)組成部分的父文件夾的名稱(chēng)。

MoveFile

該方法的作用是將一個(gè)或多個(gè)文件從一個(gè)地方移動(dòng)到另一個(gè)地方。

MoveFolder

該方法的作用是移動(dòng)一個(gè)或多個(gè)文件夾,如果源路徑包含通配符,或目的路徑以斜杠(\)為結束,則表明目的路徑為已存在的路徑,在此文件夾中移動(dòng)相匹配的文件夾.否則,認為目的路徑是一個(gè)要創(chuàng )建的目標文件夾的名字.如果目的路徑為一個(gè)已存在的文件或目的路徑為一個(gè)目錄,則出錯.如果沒(méi)有任何文件與源路徑中的通配符相匹配也出錯.

OpenTextFile

該方法可用來(lái)打開(kāi)一個(gè)指定的文件,并返回一個(gè)TextStream對象。用于讀文件或追加文件。

  2、文件夾

對文件夾的操作,我們可以使用folder對象,它提供了對文件夾所有屬性和方法的訪(fǎng)問(wèn).下表市對其主要屬性的解釋:

DateCreated

返回指定文件或文件夾的創(chuàng )建日期和時(shí)間

DateLastAccessed

返回最后一次訪(fǎng)問(wèn)指定文件或文件夾的日期和時(shí)間

Drive

返回指定文件或文件夾所在的驅動(dòng)器符號

Files

返回由File對象組成的所有Files集合,這些Files集合包含在指定的文件夾中,包括設置了隱藏和系統文件屬性的那些文件夾

IsRootFolder

如果指定的文件夾是根文件夾,則返回True,否則返回False

Name

設置或返回指定文件或文件夾的名稱(chēng)

ParentFolder

返回指定文件或文件夾的父文件夾的Folder對象

Path

返回指定文件、文件夾或驅動(dòng)器的路徑

ShortName

返回較早的需要8.3文件命名約定的程序所使用的短文件名

ShortPath

返回較早的需要8.3文件命名約定的程序所使用的短路徑

Size

對文件來(lái)說(shuō),本屬性返回以字節為單位的文件大小;對文件夾來(lái)說(shuō),返回以字節為單位包括其中所有文件或子文件夾的大小

SubFolders

返回包含所有文件夾的一個(gè)Folders集合,這些文件夾包含在某個(gè)特定文件夾中, 包括設置了隱藏和系統文件屬性的那些文件夾

Type

返回指定文件或文件夾的類(lèi)型信息.

使用Folder對象的第一部就是先用FileSystemObjectd的GetFolder方法得到Folder對象, 該方法的作用是返回指定路徑上的與某個(gè)文件夾相關(guān)的Folder對象.要保證指定的文件夾是實(shí)際存在的,否則會(huì )出錯.

讓我們來(lái)看一看其中的各種屬性及其用法吧.

(1)Attributes屬性可以返回文件或文件夾的屬性,或者設置他們的新屬性.所設屬性可以是以下值中任意一個(gè)或多個(gè)的邏輯組合.

常數

說(shuō)明

Normal

0

為一般文件,不設置屬性

ReadOnly

1

為只讀文件,屬性為讀/寫(xiě)

Hidden

2

為隱藏文件,屬性為讀/寫(xiě)

System

4

為系統文件,屬性為讀/寫(xiě)

Volume

8

為磁盤(pán)驅動(dòng)器卷標,屬性為只讀

Directory

16

為文件夾或目錄,屬性為只讀

Archive

32

在上次備份后已經(jīng)改變的文件,屬性為讀/寫(xiě)

Alias

64

為鏈接或快捷方式,屬性為只讀

Compressed

128

為壓縮文件,屬性為只讀

(2)DateCreated屬性返回指定文件或文件夾的創(chuàng )建日期和時(shí)間,本屬性為只讀屬性.

下面是用法:

Sub ShowFolderList( folderspec )  ‘folderspec 為文件夾名稱(chēng)

   Dim fs , f, f1,fc , s

   Set fs = CreateObject(“Scripting.FileSystemObject”)

   Set f = fs.GetFolder(folderspec) ‘得到folderspec文件夾相關(guān)的folder對象

   Set fc = f.SubFolders ‘得到folder對象所包含的文件夾的folder集合

   For Each fi in fc      ‘訪(fǎng)問(wèn)folder集合中的每一個(gè)folder

s= s &  f1.name       ‘格式化要顯示的文本

s= s & vbCrLf

   Next 

   MsgBox s   ‘用對話(huà)框顯示信息

End Sub

(3)DateLastModified屬性用來(lái)返回最后一次修改指定文件或文件夾的日期和時(shí)間,本屬性為只讀.

下面代碼用一個(gè)文件舉例說(shuō)明了DataLastModified屬性的用法:

Sub ShowFileAccessInfo(filespec)

Dim fs,f,s

Set fs = CreateObject(“Scripting.FileSystemObject”)

    Set f = fs.GetFolder(folderspec) ‘得到folderspec文件夾相關(guān)的folder對象

s= Ucase(filespec) & vbCrLf

s= s& “Created:” & f.DateCreate & vbCrLf

s= s & “Last Accessed :” & f.DateLastAccessed & vbCrLf

s= s & “Last Modifide :” & f.DateLastModified

MsgBox s, 0,”File Access Info”

 End Sub

(4)Type屬性返回關(guān)于某個(gè)文件或文件夾類(lèi)型的信息.例如對于以.TXT結尾的文本文件來(lái)說(shuō),本屬性會(huì )返回”Text Document”.下面的代碼舉例說(shuō)明了返回某個(gè)文件夾類(lèi)型的Type屬性的用法.在這個(gè)示例中,試圖將Recycle Bin的路徑或其他唯一的文件夾提供給過(guò)程.

Sub ShowFileSize( filespec )

Dim fs,f,s

Set fs = CreateObject(“Scripting.FileSystemObject”)

    Set f = fs.GetFolder(folderspec) ‘得到folderspec文件夾相關(guān)的folder對象

S = Ucase(f.Name) & “is a ” & f.Type    ‘格式化文本

MsgBox s,o, “File Size Info ”       ‘顯示信息

End Sub

主要方法有:

(1)Copy方法:

該方法的作用是拷貝一個(gè)指定的文件或文件夾到指定的目錄.該方法和FileSystemObject.CopyFile方法的作用相同

(2)CreateTextFile方法:

   該方法的作用是產(chǎn)生一個(gè)指定的文件名,并返回一個(gè)TextStream對象,該對象可被用于對指定的文件進(jìn)行讀寫(xiě).如果overwrite參數為False或未指定,對于一個(gè)已存在的文件,將產(chǎn)生錯誤.

(3)Delete方法:

   該方法的作用是刪除一個(gè)指定的文件或文件夾.如果指定的文件或文件夾不存在,則發(fā)生一個(gè)錯誤.對于一個(gè)File或Folder來(lái)說(shuō),Delete方法的運行的結果和執行FileSystemObject.DeleteFile或FileSystemObject.DeleteFolder的結果是一樣的.Delete方法執行時(shí)與指定的文件夾中時(shí)候有內容無(wú)關(guān).

(4)Move

   該方法用來(lái)將一個(gè)指定的文件夾或文件從一個(gè)地方移動(dòng)到另一個(gè)地方,如果只是想移動(dòng)一個(gè)文件或文件夾,則使用Move方法和使用FileSystemObject.MoveFile或FileSystemObject.MoveFolder操作的結果是一樣的,但是如果要同時(shí)移動(dòng)多個(gè)文件或文件夾,則只能使用后者.

講了這么多,還是讓我們來(lái)看一下具體的實(shí)現方法:

1、  創(chuàng )建一個(gè)文件夾

可以使用FileSystemObject對象的CreateFolder方法來(lái)實(shí)現,但要創(chuàng )建的文件夾必須不存在,否則出錯。特別注意,FileSystemObject對象不能創(chuàng )建或刪除驅動(dòng)器。

下面的例子可以在應用程序所在目錄下創(chuàng )建一個(gè)文件夾

Sub CreateFolder(folderspec)

Dim fs

Set fs = CreatObject(“Scripting.FileSystemObject”)

fs.CreaterFolder(folderspec )

End sub

2、  刪除一個(gè)或多個(gè)文件夾

可以使用FileSystemObject對象的Deletfolder方法,或者folder對象的Delete方法

Sub DeleteFolder(folderspec)

Dim fs

Set fs = CreatObject(“Scripting.FileSystemObject”)

fs.DeleteFolder(folderspec &  “100”)

‘Set f = fs.GetFolder(folderspec) ‘得到folderspec文件夾相關(guān)的folder對象

‘f.Delete

End sub

3、移動(dòng)一個(gè)或多個(gè)文件夾

 可以使用FileSystemObject對象的Movefolder方法,或者folder對象的Move方法

Sub MoveFolder(folderspec)

Dim fs

Set fs = CreatObject(“Scripting.FileSystemObject”)

fs.MoveFolder(folderspec   , “c:\windows\”)

‘Set f = fs.GetFolder(folderspec) ‘得到folderspec文件夾相關(guān)的folder對象

‘f.Move(“c:\windows\”)

End sub

4、一個(gè)或多個(gè)文件夾

     可以使用FileSystemObject對象的Copyfolder方法,或者folder對象的Copy方法。

Sub CopyFolder(folderspec)

Dim fs

Set fs = CreatObject(“Scripting.FileSystemObject”)

fs.CopyFolder(folderspec   , “c:\windows\”)

‘Set f = fs.GetFolder(folderspec) ‘得到folderspec文件夾相關(guān)的folder對象

‘f.Copy(“c:\windows\”)

End sub

二、使用visual basic所提供的語(yǔ)句對目錄操作

1、創(chuàng )建一個(gè)新目錄或文件夾

實(shí)現這一步我們可以使用vb中的MkDir語(yǔ)句。

格式:MkDir  path

作用:創(chuàng )建一個(gè)新的目錄和文件

說(shuō)明:path 指定所要創(chuàng )建的目錄或文件夾的字符串表達式。Path可以包含驅動(dòng)器。如果沒(méi)有指定驅動(dòng)器,則MkDir會(huì )在當前驅動(dòng)器上創(chuàng )建新的目錄或文件夾。如果指定的目錄或文件夾已經(jīng)存在,那么就會(huì )產(chǎn)生一個(gè)錯誤。

例如: MkDir “c:\windows\100”

2、修改目錄名

vb中提供了一個(gè)Name語(yǔ)句可以實(shí)現這些功能。

格式:  Name  oldpathname  As newpathname

作用: 從命名一個(gè)文件、目錄或文件夾。

說(shuō)明:  oldpathname字符串表達式,指定已存在的文件名和位置,可以包含目錄或文件夾以及驅動(dòng)器名。newpathname字符串表達式,指定新的文件名和位置,可以包含目錄或文件夾以及驅動(dòng)器名。并且oldpathname和newpathname必須位于同一個(gè)驅動(dòng)器上。如果newpathname指定的路徑存在但不同于oldpathname指定的路徑,則Name語(yǔ)句會(huì )將文件移動(dòng)到新的目錄或文件夾,并在必要時(shí)從新命名文件.如果newpathname和oldpathname路徑不同而文件名相同,那么Name只會(huì )移動(dòng)文件到新的位置,并保持文件名不變.

        Name語(yǔ)句可以將文件從一個(gè)目錄或文件夾移動(dòng)到另一處,但無(wú)法移動(dòng)目錄或文件夾.而且不能在一個(gè)已經(jīng)打開(kāi)的文件上使用Name,否則會(huì )產(chǎn)生錯誤.因此在改變名稱(chēng)之前,一定要關(guān)閉文件.Name參數中不能包括多字符(*)和單字符(?)的通配符.

例如:Name “c:\windows\100” As “c:\windows\200”

3、刪除目錄

對于刪除目錄,我們可以使用RmDir語(yǔ)句

格式:RmDir  path

作用:刪除一個(gè)目錄或文件夾。

說(shuō)明:path 指定所要刪除的目錄或文件夾的字符串表達式。Path可以包含驅動(dòng)器。如果沒(méi)有指定驅動(dòng)器,則RmDir會(huì )在當前驅動(dòng)器上刪除目錄或文件夾。如果想要使用RmDir刪除一個(gè)含有文件的目錄或文件夾,則會(huì )發(fā)生錯誤。只有用Kill語(yǔ)句刪除所有文件后,才能用來(lái)RmDir刪除目錄或文件夾。

例如:RmDir “c:\windows\200”

在此我們舉一個(gè)例子看一看如何獲得一個(gè)文件架下的所有子目錄.下面是源代碼:

Private Sub searchdir()

  Dim spath As String, sdir As String

  Dim booldir As Boolean '是否有子目錄的標志

  booldir = False  '初始化標志

  spath = Dir1.Path  '選擇路徑

  If Right(spath, 1) <> "\" Then  '判斷路徑最后是否以\結尾

       spath = spath & "\"    '不是,則加上

  sdir = Dir(spath & "*.*", vbDirectory) '得到當前路徑下的所有文件和目錄

  While sdir <> ""   '如果不為空

      If sdir <> "." And sdir <> ".." Then '并且不是這兩種文件夾

          booldir = True      '那么,該目錄下有子目錄

          MsgBox "該目錄下有子目錄:" & sdir   '顯示信息

      End If

      sdir = Dir()

  Wend

  If Not booldir Then   '標志為假,該目錄下沒(méi)有子目錄

      MsgBox "該目錄下沒(méi)有子目錄"

  End If

End Sub

三、使用windows提供的API函數

下面是windows中提供的對于目錄進(jìn)行操作的API函數及其功能:

CreateDirectory, CreateDirectoryEx

創(chuàng )建一個(gè)新目錄

GetCurrentDirectory

在一個(gè)緩沖區中裝載當前目錄

GetDiskFreeSpace,

GetDiskFreeSpaceEx

獲取與一個(gè)磁盤(pán)的組織有關(guān)的信息,以及了解剩余空間的容量

GetDriveType

判斷一個(gè)磁盤(pán)驅動(dòng)器的類(lèi)型

GetFullPathName

獲取指定文件的完整路徑名

GetLogicalDrives

判斷系統中存在哪些邏輯驅動(dòng)器字母

GetLogicalDriveStrings

獲取一個(gè)字串,其中包含了當前所有邏輯驅動(dòng)器的根驅動(dòng)器路徑

GetSystemDirectory

這個(gè)函數能取得Windows系統目錄(System目錄)的完整路徑名。在這個(gè)目錄中,包含了所有必要的系統文件。根據微軟的標準,其他定制控件和一些共享組件也可放到這個(gè)目錄。通常應避免在這個(gè)目錄里創(chuàng )建文件。在網(wǎng)絡(luò )環(huán)境中,往往需要管理員權限才可對這個(gè)目錄進(jìn)行寫(xiě)操作

GetTempPath

獲取為臨時(shí)文件指定的路徑

GetVolumeInformation

獲取與一個(gè)磁盤(pán)卷有關(guān)的信息

GetWindowsDirectory

這個(gè)函數能獲取Windows目錄的完整路徑名。在這個(gè)目錄里,保存了大多數windows應用程序文件及初始化文件

RemoveDirectory

刪除指定目錄

SetCurrentDirectory

設置當前目錄

SetVolumeLabel

設置一個(gè)磁盤(pán)的卷標(Label)

讓我們通過(guò)幾個(gè)例子來(lái)詳細的了解一下其中主要的幾個(gè)函數及其用法:

1、GetLogicalDrives

作用:判斷系統中存在哪些邏輯驅動(dòng)器字母

聲明形式:Declare Function GetLogicalDrives Lib "kernel32" Alias "GetLogicalDrives" () As Long

說(shuō)明:此函數的返回值類(lèi)型為L(cháng)ong,這個(gè)結構中的二進(jìn)制位標志著(zhù)存在哪些驅動(dòng)器。其中,位0設為1表示驅動(dòng)器A:存在于系統中;位1設為1表示存在B:驅動(dòng)器;以次類(lèi)推

2、GetDriveType

作用:判斷一個(gè)磁盤(pán)驅動(dòng)器的類(lèi)型

聲明形式:Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long

說(shuō)明:此函數的返回值類(lèi)型為L(cháng)ong,如驅動(dòng)器不能識別,則返回零。如指定的目錄不存在,則返回1。如執行成功,則用下述任何一個(gè)常數指定驅動(dòng)器類(lèi)型:DRIVE_REMOVABLE(表示磁盤(pán)可以從驅動(dòng)器上移走,通常是軟驅?zhuān)?DRIVE_FIXED(磁盤(pán)不能從驅動(dòng)器上移走,通常為本地硬盤(pán)), DRIVE_REMOTE(驅動(dòng)器是遠程網(wǎng)絡(luò )驅動(dòng)器), DRIVE_CDROM(驅動(dòng)器是CD-ROM驅動(dòng)器) 或 DRIVE_RAMDISK(驅動(dòng)器是RAM驅動(dòng)器)

參數為String類(lèi)型,包含了驅動(dòng)器根目錄路徑的一個(gè)字串

下面是示例代碼:

‘定義常數變量

Private Const DRIVE_CDROM = 5  ‘表示光盤(pán)驅動(dòng)器

Private Const DRIVE_FIXED = 3    ‘表示硬盤(pán)驅動(dòng)器

Private Const DRIVE_RAMDISK = 6  ‘表示RAM驅動(dòng)器

Private Const DRIVE_REMOTE = 4   ‘表示網(wǎng)絡(luò )驅動(dòng)器

Private Const DRIVE_REMOVABLE = 2  ‘表示軟盤(pán)驅動(dòng)器

‘函數聲明

Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long

Private Sub Form_Load()

  Dim temp As Long

  temp = GetDriveType("e:\") ‘取的e:盤(pán)驅動(dòng)器類(lèi)型

  Select Case temp      ‘比較

         Case DRIVE_CDROM

              MsgBox "DRIVE_CDROM: 光盤(pán)驅動(dòng)器"

         Case DRIVE_FIXED

              MsgBox "DRIVE_FIXED: 硬盤(pán)驅動(dòng)器"

         Case DRIVE_RAMDISK

              MsgBox "DRIVE_RAMDISK: RAM驅動(dòng)器"

         Case DRIVE_REMOTE

              MsgBox "DRIVE_REMOTE: 網(wǎng)絡(luò )驅動(dòng)器"

         Case DRIVE_REMOVABLE

              MsgBox "DRIVE_REMOVABLE: 軟盤(pán)驅動(dòng)器"

   End Select

End Sub

以上代碼可以判斷e:的類(lèi)型。

3、GetDiskFreeSpaceEx

作用:獲取與一個(gè)磁盤(pán)的組織以及剩余空間容量有關(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

說(shuō)明:此函數的返回值類(lèi)型為L(cháng)ong,非零表示成功,零表示失敗。會(huì )設置GetLastError.

在采用FAT16格式的windows95系統中,如一個(gè)驅動(dòng)器(分區)的容量超過(guò)了2GB,則不應使用這個(gè)函數。此時(shí),這個(gè)函數能識別的最大分區容量只有2GB

參數說(shuō)明:

參數

類(lèi)型及說(shuō)明

lpRootPathName

String,不包括卷名的磁盤(pán)根路徑名

lpFreeBytesAvailableToCaller

LARGE_INTEGER,指定一個(gè)變量,用于容納調用者可用的字節數量

lpTotalNumberOfBytes

LARGE_INTEGER,指定一個(gè)變量,用于容納磁盤(pán)上的總字節數

lpTotalNumberOfFreeBytes

LARGE_INTEGER,指定一個(gè)變量,用于容納磁盤(pán)上可用的字節數

LARGE_INTEGER結構用來(lái)代表一個(gè)64位帶符號的整數值,它的定義如下:

Type LARGE_INTEGER ' 8 Bytes
lowpart As Long
highpart As Long
End Type

其中lowpart為 Long,指定低32位

highpart 為 Long,指定高32位

LARGE_INTEGER結構與FILETIME結構內部完全一致。

請看下面示例:

Private Type LARGE_INTEGER  ' 8 Bytes,定義一個(gè)LARGE_INTEGER結構

lowpart As Long

highpart As Long

End Type

‘函數聲明

Private 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

‘定義變量

Dim RootPathName As String

Dim FreeBytesAvailabletoCaller As LARGE_INTEGER

Dim TotalNumberOfBytes As LARGE_INTEGER

Dim TotalNumberOfFreeBytes As LARGE_INTEGER

Private Sub Form_Load()

  Dim temp As Long

  Dim tempa, tempb, tempc

  RootPathName = "c:"

  ‘取得磁盤(pán)空間

  temp = GetDiskFreeSpaceEx(RootPathName, FreeBytesAvailabletoCaller, TotalNumberOfBytes, TotalNumberOfFreeBytes)

  ‘格式化文本,并顯示在text控件

  Text1.Text = Text1.Text + "磁盤(pán)容量:" + Chr(13) + Chr(10)

 tempa = TotalNumberOfBytes.highpart * 65635 + TotalNumberOfBytes.lowpart ‘計算容量

  tempa = 0 – tempa ‘我的驅動(dòng)器大于2G,要得到正確的值,進(jìn)行了調整

  Text1.Text = Text1.Text + CStr(tempa) + "字節" + Chr(13) + Chr(10)

  tempa = Format(tempa / 1024 / 1024 / 1024, "0.00")

  Text1.Text = Text1.Text + tempa + "G" + Chr(13) + Chr(10)

  ‘取得磁盤(pán)可用空間

  Text1.Text = Text1.Text + "磁盤(pán)可用空間:" + Chr(13) + Chr(10)

 tempb = TotalNumberOfFreeBytes.highpart * 1000 + TotalNumberOfFreeBytes.lowpart ‘計算

  Text1.Text = Text1.Text + CStr(tempb) + "字節" + Chr(13) + Chr(10) ’格式化文本并顯示

 tempb = Format(tempb / 1024 / 1024 / 1024, "0.00")

 Text1.Text = Text1.Text + tempb + "G" + Chr(13) + Chr(10)

  ‘取得磁盤(pán)已用空間

  Text1.Text = Text1.Text + "磁盤(pán)已用空間:" + Chr(13) + Chr(10)

 tempa = 0 – tempa  ‘調整

   tempc = tempa – tempb  ‘計算

   tempc = 0 - tempc

  Text1.Text = Text1.Text + CStr(tempc) + "G" + Chr(13) + Chr(10)’格式化文本,并顯示

End Sub

以上代碼顯示了c:上的容量,可用空間和已用空間。

4、CreateDirectory, CreateDirectoryEx

作用:創(chuàng )建一個(gè)新目錄

聲明形式:Declare Function CreateDirectory& Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpNewDirectory As String, lpSecurityAttributes As SECURITY_ATTRIBUTES)
Declare Function CreateDirectoryEx& Lib "kernel32" Alias "CreateDirectoryExA" (ByVal lpTemplateDirectory As String, ByVal lpNewDirectory As String, lpSecurityAttributes As SECURITY_ATTRIBUTES)

說(shuō)明:此函數的返回值類(lèi)型為L(cháng)ong,非零表示成功,零表示失敗。會(huì )設置GetLastError

參數說(shuō)明:

參數

類(lèi)型及說(shuō)明

lpTemplateDirectory

String,指定一個(gè)模板目錄的名字,從中復制默認屬性(比如目錄中文件的默認壓縮方式)。如設為vbNullString,則表示不使用模板

lpNewDirectory

String,新目錄的名字

lpSecurityAttributes

SECURITY_ATTRIBUTES,這個(gè)結構定義了目錄的安全特性——如果操作系統支持的話(huà)

示例程序代碼如下:

‘定義結構

Private Type SECURITY_ATTRIBUTES

   nLength As Long

   lpSecurityDescriptor As Long

   bInheritHandle As Long

End Type

‘函數聲明

Private Declare Function CreateDirectory& Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpNewDirectory As String, lpSecurityAttributes As SECURITY_ATTRIBUTES)

Private Declare Function CreateDirectoryEx& Lib "kernel32" Alias "CreateDirectoryExA" (ByVal lpTemplateDirectory As String, ByVal lpNewDirectory As String, lpSecurityAttributes As SECURITY_ATTRIBUTES)

Private Sub form_load()

  Dim temp As SECURITY_ATTRIBUTES

  CreateDirectory "c:\test", temp  ‘創(chuàng )建文件夾

End Sub

以上代碼在c:下創(chuàng )建一個(gè)名為test的文件夾

5、RemoveDirectory

作用:移除一個(gè)目錄

聲明形式:Declare Function RemoveDirectory Lib "kernel32" Alias "RemoveDirectoryA" (ByVal lpPathName As String) As Long

說(shuō)明:此函數的返回值類(lèi)型為L(cháng)ong,非零表示成功,零表示失敗。會(huì )設置GetLastError.

在調用這個(gè)函數前,目錄必須為空

參數說(shuō)明:

參數

類(lèi)型及說(shuō)明

lpPathName

為String類(lèi)型,要刪除的那個(gè)目錄的名字

示例代碼如下:

‘函數聲明

Private Declare Function RemoveDirectory Lib "kernel32" Alias "RemoveDirectoryA" (ByVal lpPathName As String) As Long

Private Sub form_load()

  Dim temp As String

  temp= “c:\test”

  RemoveDirectory temp  ‘移除文件夾

End Sub

以上代碼刪除c:下一個(gè)名為test的文件夾。

6、SetCurrentDirectory

作用:設置當前目錄

聲明形式:Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long

說(shuō)明:此函數的返回值類(lèi)型為L(cháng)ong,非零表示成功,零表示失敗。會(huì )設置GetLastError

參數說(shuō)明:

參數

類(lèi)型及說(shuō)明

LpPathName

String,新當前目錄的路徑

示例代碼如下:

‘函數聲明

Private Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long

Private Sub form_load()

  SetCurrentDirectory "c:\"  ‘設置當前目錄

End Sub

以上代碼將c:設置為當前目錄

7、GetSystemDirectory

作用:這個(gè)函數能取得Windows系統目錄(System目錄)的完整路徑名。在這個(gè)目錄中,包含了所有必要的系統文件。根據微軟的標準,其他定制控件和一些共享組件也可放到這個(gè)目錄。通常應避免在這個(gè)目錄里創(chuàng )建文件。在網(wǎng)絡(luò )環(huán)境中,往往需要管理員權限才可對這個(gè)目錄進(jìn)行寫(xiě)操作

聲明形式:Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

說(shuō)明:此函數的返回值類(lèi)型為L(cháng)ong,裝載到lpBuffer緩沖區的字符數量。如lpBuffer不夠大,不能容下文件名,則返回要求的緩沖區長(cháng)度

參數說(shuō)明:

參數

類(lèi)型及說(shuō)明

lpBuffer

String,用于裝載系統目錄路徑名的一個(gè)字串緩沖區。它應事先初始化成nSize+1個(gè)字符的長(cháng)度。通常至少要為這個(gè)緩沖區分配MAX_PATH個(gè)字符的長(cháng)度

nSize

Long,lpBuffer字串的最大長(cháng)度

示例代碼如下:

‘函數聲明

Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

Private Sub form_load()

  Dim buffer As String

  Dim size As Long

  size = 255

  buffer = size + 1

  GetSystemDirectory buffer, size  ‘將系統路徑存放在buffer中

  MsgBox buffer   ‘顯示路徑

End Sub

以上代碼獲取了windows系統目錄的完整路徑。

第二部分  文件操作

文件可以永久的存儲信息。應用程序中如果想長(cháng)期保存和訪(fǎng)問(wèn)數據,就必須將數值存儲到文件中。這些文件主要包括順序文件、隨機文件、二進(jìn)制文件。

順序文件就是普通的文本文件,任何文本編輯器都可以讀寫(xiě)這種文件。讀寫(xiě)順序文件時(shí),每次只能按順序讀寫(xiě)一行,每行的長(cháng)度可以變化。順序文件一般用于存儲字符、數字或者其他可用ASCII字符表示的數據類(lèi)型,但不能存儲像位圖之類(lèi)的信息,這些信息應該用二進(jìn)制方式表示。

隨 機文件時(shí)可以按任意次序讀寫(xiě)的文件,每行或者每個(gè)記錄的長(cháng)度是固定的。隨機文件的操作與順序文件有些不同。使用順序文件,只需要隨便指定一個(gè)變量來(lái)存儲數 據項的內容就可以了,不必擔心數據項的字符串會(huì )過(guò)長(cháng);而使用隨機文件時(shí),因為文件中的每個(gè)記錄都是等長(cháng)的,因此用于保存數據的變量必須與文件中的記錄類(lèi)型 一致。

二進(jìn)制文件存放的時(shí)字節信息,適用于存放任意結構的數據。從二進(jìn)制文件可以察看指定字節的內容,它是唯一支持到任意位置讀寫(xiě)任意長(cháng)度數據的文件類(lèi)型。

除了以上分法,文件還以不同的存儲格式分為后綴名不同的文件。

一、使用現成的控件

(一)顯示文件

因為不同文件的存儲格式的差異,所以,只有用適當的方法才能正確的顯示不同的文件。表現在表層,也就是不同的文件后綴名不同,而且不同的應用軟件只能讀取和顯示某種或幾種不同格式的文件。如:以.DOC為后綴名的文件,用WORD就可以打開(kāi),但是用記事本就無(wú)法正確顯示.所以,VB中就給我們提供了不同的控件來(lái)顯示不同的文件。

在此我們以text控件為例子,看一看用它是怎樣顯示文件的。

Private Sub mnuopen_Click()  ’當點(diǎn)擊菜單中的打開(kāi)文件時(shí)執行

Dim filepath as Sting

Dim strLine As String

'在未選擇文件時(shí),text.text為空字符,,不顯示任何內容

    text1.text = “”

CommonDialog1.FileName = ""

'下面語(yǔ)句設置文件過(guò)濾方式,可顯示擴展名為txt文件

CommonDialog1.Filter = "(*.txt)|*.txt"

'建立打開(kāi)方式的通用對話(huà)框,也可使用commondialog1.showopen

CommonDialog1.Action = 1

filepath=CommonDialog1.FileName ‘得到選擇的文件

Open filepath For Input As #1    打開(kāi)選擇的文件

Do Until EOF(1)      ‘顯示打開(kāi)的文件

        Line Input #1, strLine

        text1.Text = text1.Text + strLine + Chr(13) + Chr(10)

Loop

Close #1 ‘關(guān)閉打開(kāi)的文件

 End Sub

除了vb自帶的控件外,我們還可以使用fileSystemObject文件系統對象,file對象,以及files集合。下面我們給出兩個(gè)例子,更多更詳細的內容請參考前面目錄部分。

下面代碼舉例說(shuō)明了如何獲得一個(gè)file對象,以及如何察看它的一個(gè)屬性。

Sub ShowFileInfo(filespec)

  Dim fs, f, s

  Set fs = CreateObject("scripting.FileSystemObject")

  Set f = fs.GetFile(filespec)

  s = f.DateCreated

  MsgBox s

End Sub

對于如何獲得一個(gè)files集合,以及如何用For Each……Next語(yǔ)句來(lái)訪(fǎng)問(wèn)這個(gè)集合中的每個(gè)file,我們可以參考下面的例子:

Sub ShowFolderList( folderspec )  ‘folderspec 為文件夾名稱(chēng)

   Dim fs , f, f1,fc , s

   Set fs = CreateObject(“Scripting.FileSystemObject”)

   Set f = fs.GetFolder(folderspec) ‘得到folderspec文件夾相關(guān)的folder對象

   Set fc = f.Files ‘得到folder對象所包含的文件夾的files集合

   For Each fi in fc      ‘訪(fǎng)問(wèn)folder集合中的每一個(gè)folder

s= s &  f1.name       ‘格式化要顯示的文本

s= s & vbCrLf

   Next 

   MsgBox s   ‘用對話(huà)框顯示信息

End Sub

現成的控件一般只能顯示文件,如果要進(jìn)行更多的操作,請看下面的內容。

二、使用VisualBasic提供的語(yǔ)句

(一)打開(kāi)和關(guān)閉文件

  1、順序文件

打開(kāi)順序文件,我們可以使用Open語(yǔ)句。它的格式如下:

Open  pathname  For [Input |Output |Append] As [#]filenumber [Len = buffersize]

說(shuō)明: (1)參數pathname 表示要打開(kāi)的文件名,文件名可以包含有驅動(dòng)器和目錄

(2)Input Output 和Append用于設置順序文件的打開(kāi)方式。其中,Input表示從打開(kāi)的文件中讀取數據。以這種方式打開(kāi)文件時(shí),文件必須存在,否則會(huì )產(chǎn)生錯誤。Output表示向打開(kāi)的文件中寫(xiě)入數據。以這種方式打開(kāi)文件時(shí),文件中原有的數據將被覆蓋,新的數據將從文件開(kāi)始寫(xiě)入。如果文件不存在,則創(chuàng )建一個(gè)新文件。Append表示向打開(kāi)的文件中添加數據。以這種方式打開(kāi)時(shí),文件中原有的數據將被保留,新的數據將從文件為開(kāi)始添加。如果文件不存在,則創(chuàng )建一個(gè)新文件。

(3)As[#]filenumber 子句用于為打開(kāi)的文件指定文件號.對文件進(jìn)行讀寫(xiě)操作時(shí),要用文件號表示該文件.文件號是介于1~511之間的整數,既可以是數字,又可以是變量.也可以省略不用.

(4)當在文件與程序之間拷貝數據時(shí),Len=buffersize子句指定緩沖區的字符數.

例如: Open App.Path + "\test.dat" For Output As 1

Open App.Path + "\test.dat" For Output As 1

這兩句代碼在當前應用程序所在目錄下創(chuàng )建了一個(gè)名為test.dat的文本文件,分配文件號為1.

Open App.Path + "\test.dat" For Input As [#]filenumber

這條語(yǔ)句是從文本文件中讀取數據.

Open App.Path + "\test.dat" For Append As [#]filenumber

這條語(yǔ)句則是像文本文件中添加數據

2、隨機文件

操作隨機文件之前,首先必須定義用于保存數據項的記錄類(lèi)型.該記錄是用戶(hù)自定義數據類(lèi)型,他們是隨機文件中存儲數據的基本結構.例如:

Type Student

   No As Integer

   Name As String * 20

   age As Integer

End Type

Dim Stud As Student  ‘定義一個(gè)可以存放學(xué)生材料的變量

隨機文件中,所有的數據都將保存到若干個(gè)結構為Student類(lèi)型的記錄中, 而從隨機文件中讀出的數據則可以存放到變量Stud中.

之后我們就可以打開(kāi)并讀寫(xiě)文件了.下面是打開(kāi)隨機文件的語(yǔ)法格式:

Open filename For Random as [#]filenumber Len = Reclength

說(shuō)明: (1)參數filename 和filenumber 分別表示文件名或文件號.

(2)關(guān)鍵字Random 表示打開(kāi)的是隨機文件

(3)Len子句用于設置記錄長(cháng)度,長(cháng)度由參數Reclength指定.Reclength的值必須大于0,而且必須與定義的記錄結構的長(cháng)度一致.計算記錄長(cháng)度的方法是將記錄結構中每個(gè)元素的長(cháng)度相加.例如前面聲明的Student的長(cháng)度應該是2+20+2=24字節.

打開(kāi)一個(gè)記錄類(lèi)型為Student 的隨機文件的方法是:

Open "c:\Student.txt " For Random As #1 Len = 25

3、二進(jìn)制文件

   打開(kāi)二進(jìn)制文件的語(yǔ)法格式如下:

 Open pathname For Binary As [#]filenumber

說(shuō)明:(1) 參數filename 和filenumber 分別表示文件名或文件號.

 (2)關(guān)鍵字Binary 表示打開(kāi)的是二進(jìn)制文件

   (3)對于二進(jìn)制文件,不能指定字節長(cháng)度.每個(gè)打開(kāi)的二進(jìn)制文件都有一個(gè)自己的指針,文件指針是一個(gè)數字值,指向下一次讀寫(xiě)操作的文件中的位置.二進(jìn)制文件中的每個(gè)”位置”對應一個(gè)數據字節,因此,有n個(gè)字節的文件,就有1到n個(gè)位置.

我們可以用Seek()函數返回當前的文件指針位置(即下一個(gè)要讀寫(xiě)的字節 );用Loc()函數返回上一次讀寫(xiě)的字節位置,除非用Seek語(yǔ)句移動(dòng)了指針,Loc()返回值總比Seek()的小1.我們來(lái)看下面的例子:

Open “student.txt”  for Binary as #1

該語(yǔ)句用二進(jìn)制的方式打開(kāi)了student.txt文件.

(二)讀文件

1、順序文件

順序文件的讀取有三種方式:

(1)Line Input # 語(yǔ)句

該語(yǔ)句從打開(kāi)的順序文件中讀取一行數據。這里的一行指的是從當前指針位置開(kāi)始到回車(chē)符或回車(chē)換行符之間的所有數據。Line Input # 語(yǔ)句的語(yǔ)法格式如下:

Line Input # 文件號,變量號

說(shuō)明:“文件號”是打開(kāi)文件時(shí)所用的文件號;“變量號”使用來(lái)存放讀出數據的一個(gè)或多個(gè)變量,如果有多個(gè)變量,中間用空格分割開(kāi)。Input# 語(yǔ)句為參數列表中的每一個(gè)變量讀取文件的一個(gè)域,并將讀出的域存入變量中。該語(yǔ)句只能順序的從第一個(gè)域開(kāi)始,直到讀取想要的域。

請看下面代碼:

Dim strLine As String

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

Do Until EOF(1)

   Line Input #1, strLine

   text1.Text = text1.Text + strLine + Chr(13) + Chr(10)

Loop

Close #1

此段代碼逐行讀取一個(gè)文件到文本框中。

(2)Input函數

此函數可以從順序文件中一次讀取指定長(cháng)度的字符串。具體地說(shuō),就是從文件的當前位置開(kāi)始,讀取指定個(gè)數的字符,然后將他們返回。Input函數可以讀取包括換行符,回車(chē)符,空格符等在內的各種字符。下面是它的語(yǔ)法格式:

變量 = Input(串長(cháng)度,文件號)

例如,要從一個(gè)打開(kāi)文件中讀取12個(gè)字符并復制到變量file中,我們可以這樣寫(xiě):

file = Input(12,filenum)

如果要將整個(gè)文件復制到變量,請使用InputB函數將字節從文件復制到變量。由于InputB函數返回一個(gè)ASCII字符串,因此,必須用StrCopy函數將ASCII字符串轉換為Unicode字符串。代碼如下:

file = StrCopy (Input (LOF(filenanum),filenum),vbUnicode)

(3)Input # 語(yǔ)句

Input #語(yǔ)句可以從文件中同時(shí)向多個(gè)變量?jì)茸x入數據,而且讀入的數據可以是不同類(lèi)型的。

下面使它的語(yǔ)法格式:

Input # 文件號,變量列表

例如,我們要在文件student.txt中寫(xiě)入數據,下面是代碼:

Open "student.txt" For Output As #filenum

Write #filenum, "張三", "初一年級", 14

Write #filenum, "李四", "職業(yè)高中", 18

Dim name As String, nianji As String, age As Integer

Dim name1 As String, nianji1 As String, age1 As Integer

Open "student.txt" For Input As #filenum

Input #filenum, name, nianji, age

Input #filenum, name1, nianji1, age1

Close #filenum

執行結果:

name=”張三” ,nianji = “初一年級” ,age =14  

name=”李四” ,nianji = “職業(yè)高中” ,age =18  

2、隨機文件

讀取隨機文件是可以使用Get # 語(yǔ)句,數據從文件的一個(gè)指定記錄中讀出后,存入一個(gè)用戶(hù)自定義的變量中.

語(yǔ)法格式: Get # FileNum ,[RecNum],UserType

說(shuō)明: (1)FileNum 是要打開(kāi)的文件號;RecNum是要讀取的記錄號,若省略,則讀取下一個(gè)記錄

(2)UserType 是一個(gè)用來(lái)存放讀出數據的用戶(hù)自定義的數據類(lèi)型變量.

下面是一個(gè)例子:

Get # 1,5,Student 

該語(yǔ)句讀取文件號為1的文件中的第5條記錄.

3、二進(jìn)制文件

讀寫(xiě)二進(jìn)制文件的方法和讀寫(xiě)隨機文件的方法基本相同,下面是相關(guān)的語(yǔ)句格式及其說(shuō)明:

格式:  Get [#]fileNumber ,[Pos], Var

功能: 用二進(jìn)制方式,從文件的中指定的位置開(kāi)始讀取,所給變量長(cháng)度的數據

說(shuō)明: (1)FileNumber是以二進(jìn)制方式打開(kāi)的文件號.

(2)Pos用來(lái)指定讀寫(xiě)操作發(fā)生時(shí)的字節位置,若省略,則使用當前文件指針位置.

(3)Var是用來(lái)存放讀出的數據的變量.該語(yǔ)句會(huì )自動(dòng)根據var變量包含的字節長(cháng)度讀取適當的文件,如果Var是一個(gè)可變長(cháng)度的字符串變量,則傳送的字節數等于Var中目前的字節數.對于文件長(cháng)度的判斷我們可以使用Lof()函數,Eof()函數檢查文件的結尾位置.

下面的代碼復制studert.txt文件到student1.txt文件中

Dim ar As String * 1, i As Integer

Open "c:\student.txt" For Binary As #1

Open "c:\student2.txt" For Binary As #2

For i = 1 To LOF(1)

   Get #1, , ar

   Put #2, , ar

Next i

Close #1, #2

(三)寫(xiě)文件

1、  順序文件

 寫(xiě)順序文件我們可以用Write # 和Print #語(yǔ)句向一個(gè)已經(jīng)打開(kāi)的文件中寫(xiě)入數據.

下面是他們的格式和說(shuō)明:

Print # 的語(yǔ)法格式:

  Print # 文件號,變量列表

例如,將文本框中的文本寫(xiě)到文件中,代碼如下:

Open "file.txt" For Output As #filenum

Input #filenum, text1.text

Write # 語(yǔ)句的語(yǔ)法格式:

  Write # 文件號,變量列表

說(shuō)明:用Write # 語(yǔ)句寫(xiě)入的信息便于以后用Input #語(yǔ)句來(lái)讀取數據,因為Write #語(yǔ)句自動(dòng)將寫(xiě)入到文件中的信息用逗號分開(kāi),并為字符串數據加上雙引號.例如:

Open "student.txt" For Output As #filenum

Write #filenum, "張三", "初一年級", 14

Write #filenum, "李四", "職業(yè)高中", 18

2、  隨機文件

向隨機文件中寫(xiě)入數據,使用Put?。UZ(yǔ)句.語(yǔ)法格式如下:

Put [#] FileNum ,[RecNum],UserType

說(shuō)明: (1) FileNum 是要打開(kāi)的文件號;RecNum是要寫(xiě)入的記錄號,若省略,則再上一次用Get 和Put語(yǔ)句所讀寫(xiě)過(guò)的記錄的后一條記錄中寫(xiě)入,如果沒(méi)有執行過(guò)Get 和Put語(yǔ)句,就從第一條記錄開(kāi)始

(2)UserType 是包含要寫(xiě)入數據的用戶(hù)自定義的數據類(lèi)型變量.例如:我們向前面的student.txt文件中的第5個(gè)記錄寫(xiě)入數據,可用這些語(yǔ)句:

stud.No = 0301

stud.Name = “王武”

stud.Age =20

Put #1 ,5,stud

如果要插入的數據不只一兩條的話(huà),首先要確定文件和每條記錄的長(cháng)度,這樣就可以計算出文件中究竟有多少條記錄.我們可以用Lof()函數返回文件的長(cháng)度,Len()函數返回每個(gè)記錄的長(cháng)度,計算文件中的記錄個(gè)數可以用文件的長(cháng)度除以給個(gè)記錄的長(cháng)度.示例如下:

Nextrec= (Lof(1)\Len(UserType))+1

Put #1,Nextrec,UserType

3、二進(jìn)制文件

下面是以二進(jìn)制方式寫(xiě)入文件的語(yǔ)句格式及其說(shuō)明:

格式:  Put [#]fileNumber ,[Pos], Var

功能: 用二進(jìn)制方式,從文件的中指定的位置開(kāi)始寫(xiě)入,所給變量長(cháng)度的數據

說(shuō)明: (1)FileNumber是以二進(jìn)制方式打開(kāi)的文件號.

(2)Pos用來(lái)指定寫(xiě)操作發(fā)生時(shí)的字節位置,若省略,則使用當前文件指針位置.

(3)Var是用來(lái)存放寫(xiě)入的數據的變量.該語(yǔ)句會(huì )自動(dòng)根據var變量包含的字節長(cháng)度寫(xiě)入文件,如果Var是一個(gè)可變長(cháng)度的字符串變量,則傳送的字節數等于Var中目前的字節數.

使用方法可參考二進(jìn)制文件的讀操作.

三、使用windows提供的API函數

下面是windows中提供的對于文件進(jìn)行操作的API函數及其功能:

CloseHandle

關(guān)閉一個(gè)內核對象。其中包括文件、文件映射、進(jìn)程、線(xiàn)程、安全和同步對象等。涉及文件處理時(shí),這個(gè)函數通常與vb的close命令相似。應盡可能的使用close,因為它支持vb的差錯控制。注意這個(gè)函數使用的文件句柄與vb的文件編號是完全不同的

CompareFileTime

根據FILETIME結構的信息,對比兩個(gè)文件的時(shí)間

CopyFile

復制文件。與vb的filecopy命令相似

CreateFile

這是一個(gè)全功能的例程,可打開(kāi)和創(chuàng )建文件、管道、郵槽、通信服務(wù)、設備以及控制臺

DeleteFile

刪除指定文件

FindClose

關(guān)閉由FindFirstFile函數創(chuàng )建的一個(gè)搜索句柄

FindFirstFile

根據文件名查找文件

FindNextFile

根據調用FindFirstFile函數時(shí)指定的一個(gè)文件名查找下一個(gè)文件

FlushFileBuffers

針對指定的文件句柄,刷新內部文件緩沖區

GetBinaryType

判斷文件是否可以執行

GetFileAttributes

判斷指定文件的屬性

GetFileInformationByHandle

這個(gè)函數提供了獲取文件信息的一種機制——在一個(gè)BY_HANDLE_FILE_INFORMATION結構中裝載與文件有關(guān)的信息

GetFileSize

判斷文件長(cháng)度

GetFileTime

取得指定文件的時(shí)間信息

GetFileType

在給出文件句柄的前提下,判斷文件類(lèi)型

GetFileVersionInfo

從支持版本標記的一個(gè)模塊里獲取文件版本信息

GetFileVersionInfoSize

針對包含了版本資源的一個(gè)文件,判斷容納文件版本信息需要一個(gè)多大的緩沖區

GetShortPathName

獲取指定文件的短路徑名

GetTempFileName

這個(gè)函數包含了一個(gè)臨時(shí)文件的名字,它可由應用程序使用

lclose

關(guān)閉指定的文件,請參考CloseHandle函數,了解進(jìn)一步的情況

lcreat

創(chuàng )建一個(gè)文件。如文件已經(jīng)存在,就會(huì )將其縮短成零長(cháng)度,并將其打開(kāi),以便讀寫(xiě)

llseek

設置文件中進(jìn)行讀寫(xiě)的當前位置。該函數與vb的seek語(yǔ)句類(lèi)似。如果用vb的open命令打開(kāi)了一個(gè)文件,那么不要再對這個(gè)文件使用llseek函數

LockFile

在windows中,文件可用共享模式打開(kāi)——在這種情況下,多個(gè)進(jìn)程可同時(shí)訪(fǎng)問(wèn)該文件。利用這個(gè)函數,要對文件進(jìn)行讀寫(xiě)的一個(gè)應用程序可將文件的某一部分鎖定起來(lái),使其不能由其他應用程序訪(fǎng)問(wèn)。這樣便避免了同時(shí)讀寫(xiě)時(shí)發(fā)生的沖突

LockFileEx

與LockFile相似,只是它提供了更多的功能

lopen

以二進(jìn)制模式打開(kāi)指定的文件

lread

將文件中的數據讀入內存緩沖區

lwrite

將數據從內存緩沖區寫(xiě)入一個(gè)文件

MoveFile, MoveFileEx

移動(dòng)文件。如dwFlags設為零,則MoveFile完全等價(jià)于MoveFileEx

OpenFile

這個(gè)函數能執行大量不同的文件操作。和這個(gè)函數相比,請優(yōu)先考慮win32的CreateFile函數(它能打開(kāi)命名管道和控制Unicode文件名,同時(shí)不受128個(gè)字符的路徑名稱(chēng)的限制)

ReadFile

從文件中讀出數據。與lread函數相比,這個(gè)函數要明顯靈活的多。該函數能夠操作通信設備、管道、套接字以及郵槽

ReadFileEx

與ReadFile相似,只是它只能用于異步讀操作,并包含了一個(gè)完整的回調

SearchPath

查找指定文件

SetEndOfFile

針對一個(gè)打開(kāi)的文件,將當前文件位置設為文件末尾

SetFileAttributes

設置文件屬性

SetFilePointer

在一個(gè)文件中設置當前的讀寫(xiě)位置

SetFileTime

設置文件的創(chuàng )建、訪(fǎng)問(wèn)及上次修改時(shí)間

UnlockFile

解除對一個(gè)文件的鎖定

UnlockFileEx

解除對一個(gè)文件的鎖定

WriteFile

將數據寫(xiě)入一個(gè)文件。該函數比lwrite函數要靈活的多。也可將這個(gè)函數應用于對通信設備、管道、套接字以及郵槽的處理

WriteFileEx

與WriteFile類(lèi)似,只是它只能用于異步寫(xiě)操作,并包括了一個(gè)完整的回調

讓我們通過(guò)幾個(gè)例子來(lái)詳細的了解一下其中主要的幾個(gè)函數及其用法:

1、CreateFile

作用:這是一個(gè)全功能的例程,可打開(kāi)和創(chuàng )建文件、管道、郵槽、通信服務(wù)、設備以及控制臺

聲明形式:Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long

說(shuō)明:此函數的返回值類(lèi)型為L(cháng)ong,如執行成功,則返回文件句柄。INVALID_HANDLE_VALUE表示出錯,會(huì )設置GetLastError。即使函數成功,但若文件存在,且指定了CREATE_ALWAYS 或 OPEN_ALWAYS,GetLastError也會(huì )設為ERROR_ALREADY_EXISTS

打開(kāi)一個(gè)通信端口時(shí)(如COM1),無(wú)論如何都要設置成 OPEN_EXISTING
這個(gè)函數代替了lOpen 和 lCreate函數,應該是我們的首選

參數說(shuō)明:

參數

類(lèi)型及說(shuō)明

lpFileName

String,要打開(kāi)的文件的名字

dwDesiredAccess

Long,如果為 GENERIC_READ 表示允許對設備進(jìn)行讀訪(fǎng)問(wèn);如果為 GENERIC_WRITE 表示允許對設備進(jìn)行寫(xiě)訪(fǎng)問(wèn)(可組合使用);如果為零,表示只允許獲取與一個(gè)設備有關(guān)的信息

dwShareMode

Long,零表示不共享; FILE_SHARE_READ 和/或 FILE_SHARE_WRITE 表示允許對文件進(jìn)行共享訪(fǎng)問(wèn)

lpSecurityAttributes

SECURITY_ATTRIBUTES,指向一個(gè)SECURITY_ATTRIBUTES結構的指針,定義了文件的安全特性(如果操作系統支持的話(huà))

dwCreationDisposition

Long,下述常數之一:

CREATE_NEW

創(chuàng )建文件;如文件存在則會(huì )出錯

CREATE_ALWAYS

創(chuàng )建文件,會(huì )改寫(xiě)前一個(gè)文件

OPEN_EXISTING

文件必須已經(jīng)存在。由設備提出要求

OPEN_ALWAYS

如文件不存在則創(chuàng )建它

TRUNCATE_EXISTING

講現有文件縮短為零長(cháng)度

dwFlagsAndAttributes

Long,一個(gè)或多個(gè)下述常數

FILE_ATTRIBUTE_ARCHIVE

標記歸檔屬性

FILE_ATTRIBUTE_COMPRESSED

將文件標記為已壓縮,或者標記為文件在目錄中的默認壓縮方式

FILE_ATTRIBUTE_NORMAL

默認屬性

FILE_ATTRIBUTE_HIDDEN

隱藏文件或目錄

FILE_ATTRIBUTE_READONLY

文件為只讀

FILE_ATTRIBUTE_SYSTEM

文件為系統文件

FILE_FLAG_WRITE_THROUGH

操作系統不得推遲對文件的寫(xiě)操作

FILE_FLAG_OVERLAPPED

允許對文件進(jìn)行重疊操作

FILE_FLAG_NO_BUFFERING

禁止對文件進(jìn)行緩沖處理。文件只能寫(xiě)入磁盤(pán)卷的扇區塊

FILE_FLAG_RANDOM_ACCESS

針對隨機訪(fǎng)問(wèn)對文件緩沖進(jìn)行優(yōu)化

FILE_FLAG_SEQUENTIAL_SCAN

針對連續訪(fǎng)問(wèn)對文件緩沖進(jìn)行優(yōu)化

FILE_FLAG_DELETE_ON_CLOSE

關(guān)閉了上一次打開(kāi)的句柄后,將文件刪除。特別適合臨時(shí)文件

也可在Windows NT下組合使用下述常數標記:


SECURITY_ANONYMOUS, SECURITY_IDENTIFICATION, SECURITY_IMPERSONATION, SECURITY_DELEGATION, SECURITY_CONTEXT_TRACKING, SECURITY_EFFECTIVE_ONLY


hTemplateFile

Long,如果不為零,則指定一個(gè)文件句柄。新文件將從這個(gè)文件中復制擴展屬性

示例如下:

long hfile= CreateFile(“c:\\test.txt”,GENERIC_READ,

FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,

OPEN_EXISTING,FILE_ELAG_OVERLAPPED,NULL)

2、lcreat

作用:創(chuàng )建一個(gè)文件。如文件已經(jīng)存在,就會(huì )將其縮短成零長(cháng)度,并將其打開(kāi),以便讀寫(xiě)

聲明形式:Declare Function lcreat Lib "kernel32" Alias "_lcreat" (ByVal lpPathName As String, ByVal iAttribute As Long) As Long

說(shuō)明:此函數的返回值類(lèi)型為L(cháng)ong,如執行成功,返回打開(kāi)文件的句柄。如果出錯,則返回HFILE_ERROR

該函數會(huì )打開(kāi)已由其他應用程序打開(kāi)的文件,所以使用它時(shí)要小心。win32的CreateFile函數已取代了這個(gè)函數。這個(gè)函數與vb的open語(yǔ)句作用相同

參數說(shuō)明:

參數

類(lèi)型及說(shuō)明

lpPathName

String,欲創(chuàng )建的文件的名字

iAttribute

Long,下述值之一
0——文件能夠讀寫(xiě)
1——創(chuàng )建只讀文件
2——創(chuàng )建隱藏文件
3——創(chuàng )建系統文件

例如下面的語(yǔ)句打開(kāi)c:\test.txt文件

lcreat “c:\test.txt”,0

3、lopen

作用:以二進(jìn)制模式打開(kāi)指定的文件

聲明形式:Declare Function lopen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long

說(shuō)明:此函數的返回值類(lèi)型為L(cháng)ong,如執行成功,返回打開(kāi)文件的句柄。HFILE_ERROR表示出錯。會(huì )設置GetLastError

CreateFile函數在win32下提供了更多的功能

參數說(shuō)明:

參數

類(lèi)型及說(shuō)明

lpPathName

String,欲打開(kāi)文件的名字

iReadWrite

Long,訪(fǎng)問(wèn)模式和共享模式常數的一個(gè)組合,如下所示:

1、訪(fǎng)問(wèn)模式


READ

打開(kāi)文件,讀取其中的內容

READ_WRITE

打開(kāi)文件,對其進(jìn)行讀寫(xiě)

WRITE

打開(kāi)文件,在其中寫(xiě)入內容

2、共享模式(參考OpenFile函數的標志常數表)


OF_SHARE_COMPAT, OF_SHARE_DENY_NONE, OF_SHARE_DENY_READ, OF_SHARE_DENY_WRITE, OF_SHARE_EXCLUSIVE


4、GetFileTime

作用:取得指定文件的時(shí)間信息

聲明形式:Declare Function GetFileTime Lib "kernel32" Alias "GetFileTime" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long

說(shuō)明:Long,非零表示成功,零表示失敗。會(huì )設置GetLastError

如果不需要特定的信息,那么lpCreationTime,lpLastAccessTime,lpLastWriteTime都可以設置為零(用ByVal As Long)。這個(gè)函數返回的文件時(shí)間采用UTC格式

參數說(shuō)明:

參數

類(lèi)型及說(shuō)明

hFile

Long,文件的句柄

lpCreationTime

FILETIME,用于裝載文件的創(chuàng )建時(shí)間

lpLastAccessTime

FILETIME,用于裝載文件上一次訪(fǎng)問(wèn)的時(shí)間(FAT文件系統不支持這一特性)

lpLastWriteTime

FILETIME,用于裝載文件上一次修改的時(shí)間

示例代碼如下:

‘函數聲明

Private Declare Function GetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FileTime, lpLastAccessTime As FileTime, lpLastWriteTime As FileTime) As Long

Private Declare Function lopen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long

‘定義變量

Dim file As Long

Dim CreationTime As FileTime

Dim lastaccesstime As FileTime

Dim lastaccesstime As FileTime

‘定義結構

Private Type FileTime

    dwLowDateTime As Long

    dwHighDateTime As Long

End Type

Private Sub Form_Load()

str1 = "c:\text.txt"

file = lopen(str1, READ_WRITE) ‘打開(kāi)文件

temp = GetFileTime(file, CreationTime, lastaccesstime, lastwritetime)’得到文件相關(guān)信息

MsgBox CreationTime  ‘顯示信息

End Sub

以上代碼顯示文件的創(chuàng )建時(shí)間

5、CopyFile

作用:復制文件。與vb的filecopy命令相似

聲明形式:Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

說(shuō)明:Long,非零表示成功,零表示失敗。會(huì )設置GetLastError

參數說(shuō)明:

參數

類(lèi)型及說(shuō)明

lpExistingFileName

String,源文件名

lpNewFileName

String,目標文件名

bFailIfExists

Long,如果設為T(mén)RUE(非零),那么一旦目標文件已經(jīng)存在,則函數調用會(huì )失敗。否則目標文件被改寫(xiě)

示例代碼如下:

‘函數聲明

Private Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

Private Sub Form_Load()

CopyFile "c:\test1.txt", "c:\test2.txt", 1

End Sub

以上代碼將c:\test1.txt 拷貝到c:\test2.txt

6、MoveFile, MoveFileEx

作用:移動(dòng)文件。如dwFlags設為零,則MoveFile完全等價(jià)于MoveFileEx

聲明形式:Declare Function MoveFile& Lib "kernel32" Alias "MoveFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String)
Declare Function MoveFileEx& Lib "kernel32" Alias "MoveFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal dwFlags As Long)

說(shuō)明:Long,非零表示成功,零表示失敗。會(huì )設置GetLastError

這兩個(gè)函數通常不能將文件從一個(gè)卷移動(dòng)到另一個(gè)卷。但如設置了MOVEFILE_COPY_ALLOWED標記,MoveFileEx可以做到這一點(diǎn).

參數說(shuō)明:

參數

類(lèi)型及說(shuō)明

lpExistingFileName

String,欲移動(dòng)的文件名

lpNewFileName

String,新文件名

dwFlags

Long,一個(gè)或多個(gè)下述常數

MOVEFILE_REPLACE_EXISTING

如目標文件存在,則將其替換

MOVEFILE_COPY_ALLOWED

如移動(dòng)到一個(gè)不同的卷,則復制文件并刪除原來(lái)的文件

MOVEFILE_DELAY_UNTIL_REBOOT

移動(dòng)操作在系統下次重新啟動(dòng)時(shí)正式進(jìn)行。這樣便可在Windows NT中改換系統文件

示例代碼如下:

‘定義結構

Private Const MOVEFILE_COPY_ALLOWED = &H2

Private Const MOVEFILE_DELAY_UNTIL_REBOOT = &H4

Private Const MOVEFILE_REPLACE_EXISTING = &H1

‘函數聲明

Private Declare Function MoveFile& Lib "kernel32" Alias "MoveFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String)

Private Declare Function MoveFileEx& Lib "kernel32" Alias "MoveFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal dwFlags As Long)

Private Sub Form_Load()

MoveFile "c:\test.txt", "d:\test1.txt" ‘移動(dòng)文件

MoveFileEx "d:\test1.txt", "c:\test.txt", MOVEFILE_REPLACE_EXISTING  ‘再一次移動(dòng)

End Sub

以上代碼實(shí)現了文件的移動(dòng),兩次移動(dòng)後,文件不變

7、DeleteFile

作用:刪除指定文件

聲明形式:Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long

說(shuō)明:Long,非零表示成功,零表示失敗。會(huì )設置GetLastError

與vb的kill語(yǔ)句相似,在windows 95下使用這個(gè)函數要小心——即使文件當前正由一個(gè)應用程序打開(kāi),該函數也會(huì )將其刪除.

參數說(shuō)明:

參數

類(lèi)型及說(shuō)明

lpFileName

String,欲刪除文件的名字

示例代碼如下:

‘函數聲明

Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long

Private Sub Form_Load()

DeleteFile "c:\test.txt"

End Sub

以上代碼刪除了c:\test.txt文件

    寫(xiě)了這沒(méi)多,真的很累了,所以更希望自己的辛苦沒(méi)有白費,VB雖然是一個(gè)RAD類(lèi)的工具,并讓很多人不屑使用,但實(shí)事求是得說(shuō),VB的功能的確強大,尤其是人性化的設計,讓人愛(ài)不釋手,希望對喜愛(ài)VB的愛(ài)好者能夠對vb能產(chǎn)生一個(gè)新的認識,而不僅僅停留在對其提供的現有控件的使用。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
★Excel-VBA操作文件四大方法[ExcelHome技術(shù)論壇]
Excel-VBA操作文件四大方法之四(1)
Windows SHELL命令在VBA使用
VBA實(shí)用小程序58: 判斷文件是否存在
使用VBA操作文件(2):處理文件的VBA函數和語(yǔ)句
【煙花原創(chuàng )】VBA零基礎之第197篇VBA之文件與文件夾(六)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久