九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

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

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

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


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

第一部分   目錄操作

一、使用現(xiàn)成控件

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

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

有這么兩類:一類是驅(qū)動(dòng)器列表框(DriveListBox)、目錄列表框(DirListBox)和文件列表框(FileListBox)三個(gè)控件組合而成的自定義對(duì)話框;另一類是windows提供的標(biāo)準(zhǔn)對(duì)話框。

他們?cè)诠ぞ呦渲械奈恢煤蛨D標(biāo)如下所示:

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

 

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

屬性

Drive

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

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

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

設(shè)置C盤為當(dāng)前驅(qū)動(dòng)器.

事件

Change

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

下面是示例代碼:

   Private Sub Drive1_Change()

         Dir1.Path = Drive1.Drive 

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

   End Sub

2、目錄列表框

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

屬性

Path

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

示例:  Dri1.Path = Drive1.Drive 

設(shè)置在驅(qū)動(dòng)器列表框中選中的驅(qū)動(dòng)器盤符為目錄列表的當(dāng)前路徑.

ListIndex

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


ListCount

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

事件

Change

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

下面是示例代碼:

Private Sub Dir1_Change()

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

File1.Path = Dir1.Path

End Sub

3、文件列表框

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

屬性

Path

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

示例: File1.Path= Dri1.Path  

設(shè)置在目錄列表框中選中的路徑為文件列表的當(dāng)前路徑.

Pattern

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


FileName

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

事件

Click

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

下面是示例代碼:

Private Sub File1_Click()

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

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

End Sub

4、標(biāo)準(zhǔn)對(duì)話框

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

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

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

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

方法

所顯示的對(duì)話框

ShowOpen

ShowSave

ShowColor

ShowFont

ShowPrinter

Showhelp

顯示[打開(kāi)]對(duì)話框

顯示[另存為]對(duì)話框

顯示[顏色]對(duì)話框

顯示[字體]對(duì)話框

顯示[打印]或[打印選項(xiàng)]對(duì)話框

顯示windows幫助引擎

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

屬性

Filer

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

Action

該屬性返回或設(shè)置一個(gè)表示所顯示對(duì)話框類型的整數(shù).具體如下.


設(shè)置數(shù)值

說(shuō)明


0

1

2

3

4

5

6

沒(méi)有操作

顯示[打開(kāi)]對(duì)話框

顯示[另存為]對(duì)話框

顯示[顏色]對(duì)話框

顯示[字體]對(duì)話框

顯示[打印]或[打印選項(xiàng)]對(duì)話框

運(yùn)行WINHLP32.EXE


FileName

本屬性應(yīng)用于CommonDialog控件的[打開(kāi)][另存為]對(duì)話框.

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

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

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


事件

Click

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

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

我們?cè)谶@里要做一個(gè)vcd的播放器下面是界面.

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

對(duì)象

特性

設(shè)置值

窗體

名稱

Frmvcd

BorderStyle

1

Caption

Vcd播放器

菜單

標(biāo)題

文件

名稱

Mnufile

標(biāo)題

打開(kāi)


名稱

Mnuopen


標(biāo)題

播放


名稱

Mnuplay


標(biāo)題

退出


名稱

Mnuexit


標(biāo)題

選項(xiàng)

名稱

Mnuoption


標(biāo)題

連續(xù)播放


名稱

Mnurepeat


標(biāo)題

靜音


名稱

Mnuslient


多媒體控件

名稱

Mmcontrol

Picture控件

名稱

Picture1

通用對(duì)話框

名稱

Commondialog1

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

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

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

mnuplay.Enabled =False

CommonDialog1.FileName = ""

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

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

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

CommonDialog1.FilterIndex = 1

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

CommonDialog1.Action = 1

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

MMControl1.Command = "close"

Select Case CommonDialog1.FilterIndex

    Case 1  '選擇*.avi

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

       MMControl1.DeviceType = "avividio"

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

       MMControl1.TimeFormat = 3

       '設(shè)置播放的文件為通用對(duì)話框中選擇的文件

        MMControl1.FileName = CommonDialog1.FileName

       '打開(kāi)文件

        MMControl1.Command = "open "

    Case 2 '選擇*.wav

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

       MMControl1.DeviceType = "waveaudio"

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

      MMControl1.TimeFormat = 3

      '設(shè)置播放的文件為通用對(duì)話框中選擇的文件

       MMControl1.FileName = CommonDialog1.FileName

      '打開(kāi)文件

       MMControl1.Command = "open "

    Case 3  '選擇*.dat

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

        MMControl1.DeviceType = "Mpegvidio"

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

       MMControl1.TimeFormat = 3

       '設(shè)置播放的文件為通用對(duì)話框中選擇的文件

       MMControl1.FileName = CommonDialog1.FileName

       '打開(kāi)文件

       MMControl1.Command = "open "

    Case 4  '選擇*.mid

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

       MMControl1.DeviceType = "waveaudio"

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

       MMControl1.TimeFormat = 3

       '設(shè)置播放的文件為通用對(duì)話框中選擇的文件

       MMControl1.FileName = CommonDialog1.FileName

       '打開(kāi)文件

       MMControl1.Command = "open "

End Select

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

MMControl1.hWndDisplay = Picture1.hWnd

End Sub

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

以上控件除了通用對(duì)話框(CommonDialog)之外一般只能顯示當(dāng)前的目錄結(jié)構(gòu),對(duì)于在磁盤上新建、修改、刪除目錄卻基本無(wú)能為力。

我們先來(lái)看看通用對(duì)話框?qū)ξ募A的新建,修改和刪除操作.

1、新建目錄

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

2、修改文件夾名稱

可以在顯示出來(lái)的通用對(duì)話框中,用鼠標(biāo)右鍵點(diǎn)擊選擇所要修改的文件夾,再?gòu)棾龅目旖莶藛沃?,選擇重命名,即可修改目錄名稱。如下圖所示:

3、刪除文件夾

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

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

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

對(duì)象

功能

Drive

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

Folder

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

Files

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

FileSysterObject

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

TextStream

允許讀寫文本文件

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

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

Dim fso As New FileSystemObject

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

Dim fso As  Object ‘ 聲明對(duì)象變量

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

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

1、驅(qū)動(dòng)器

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

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

  Sub ShowDriveList()

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

‘創(chuàng)建文件系統(tǒng)對(duì)象

Set fs = CreatObject(“Scripting. FileSystemObject”)

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

Set dc= fs.Drives

‘取的驅(qū)動(dòng)器對(duì)象

For Each d in dc

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

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

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

   Else

      n = d.volumeName     ‘否則取得它的卷標(biāo)

   End if

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

Next

MsgBox s          ‘顯示文本

End sub

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

Availablespace

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

DriveLetter

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

Freespace

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

DriverType

驅(qū)動(dòng)器類型

TotalSize

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

FileSystem

驅(qū)動(dòng)器文件系統(tǒng)

IsReady

驅(qū)動(dòng)器是否已準(zhǔn)備

Path

驅(qū)動(dòng)器根目錄

SerizlNumber

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

VolumeName

驅(qū)動(dòng)器卷標(biāo)

ShareName

驅(qū)動(dòng)器共享名

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

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

  Dim fs As Object, d, s     

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

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

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

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

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

‘計(jì)算驅(qū)動(dòng)器的剩余磁盤空間

  s = s & "Kbytes"

  MsgBox s    ‘顯示

  End Sub

下面是filesystemobject的其他方法

CreateFolder

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

CreateTextFile

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

DeleteFile

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

DeleteFolder

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

DriveExists

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

FileExists

該方法的作用是判斷指定的文件對(duì)象是否存在于當(dāng)前文件夾

FolderExists

該方法的作用是判斷指定的文件夾對(duì)象是否存在于當(dāng)前文件夾

GetDrive

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

GerDriveName

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

GetExtensionName

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

GetFile

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

GetFileName

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

GetFolder

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

GetParentFolderName

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

MoveFile

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

MoveFolder

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

OpenTextFile

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

  2、文件夾

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

DateCreated

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

DateLastAccessed

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

Drive

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

Files

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

IsRootFolder

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

Name

設(shè)置或返回指定文件或文件夾的名稱

ParentFolder

返回指定文件或文件夾的父文件夾的Folder對(duì)象

Path

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

ShortName

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

ShortPath

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

Size

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

SubFolders

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

Type

返回指定文件或文件夾的類型信息.

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

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

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

常數(shù)

說(shuō)明

Normal

0

為一般文件,不設(shè)置屬性

ReadOnly

1

為只讀文件,屬性為讀/寫

Hidden

2

為隱藏文件,屬性為讀/寫

System

4

為系統(tǒng)文件,屬性為讀/寫

Volume

8

為磁盤驅(qū)動(dòng)器卷標(biāo),屬性為只讀

Directory

16

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

Archive

32

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

Alias

64

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

Compressed

128

為壓縮文件,屬性為只讀

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

下面是用法:

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

   Dim fs , f, f1,fc , s

   Set fs = CreateObject(“Scripting.FileSystemObject”)

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

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

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

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

s= s & vbCrLf

   Next 

   MsgBox s   ‘用對(duì)話框顯示信息

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對(duì)象

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è)文件或文件夾類型的信息.例如對(duì)于以.TXT結(jié)尾的文本文件來(lái)說(shuō),本屬性會(huì)返回”Text Document”.下面的代碼舉例說(shuō)明了返回某個(gè)文件夾類型的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對(duì)象

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對(duì)象,該對(duì)象可被用于對(duì)指定的文件進(jìn)行讀寫.如果overwrite參數(shù)為False或未指定,對(duì)于一個(gè)已存在的文件,將產(chǎn)生錯(cuò)誤.

(3)Delete方法:

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

(4)Move

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

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

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

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

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

Sub CreateFolder(folderspec)

Dim fs

Set fs = CreatObject(“Scripting.FileSystemObject”)

fs.CreaterFolder(folderspec )

End sub

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

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

Sub DeleteFolder(folderspec)

Dim fs

Set fs = CreatObject(“Scripting.FileSystemObject”)

fs.DeleteFolder(folderspec &  “100”)

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

‘f.Delete

End sub

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

 可以使用FileSystemObject對(duì)象的Movefolder方法,或者folder對(duì)象的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對(duì)象

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

End sub

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

     可以使用FileSystemObject對(duì)象的Copyfolder方法,或者folder對(duì)象的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對(duì)象

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

End sub

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

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

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

格式:MkDir  path

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

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

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

2、修改目錄名

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

格式:  Name  oldpathname  As newpathname

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

說(shuō)明:  oldpathname字符串表達(dá)式,指定已存在的文件名和位置,可以包含目錄或文件夾以及驅(qū)動(dòng)器名。newpathname字符串表達(dá)式,指定新的文件名和位置,可以包含目錄或文件夾以及驅(qū)動(dòng)器名。并且oldpathname和newpathname必須位于同一個(gè)驅(qū)動(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)生錯(cuò)誤.因此在改變名稱之前,一定要關(guān)閉文件.Name參數(shù)中不能包括多字符(*)和單字符(?)的通配符.

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

3、刪除目錄

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

格式:RmDir  path

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

說(shuō)明:path 指定所要?jiǎng)h除的目錄或文件夾的字符串表達(dá)式。Path可以包含驅(qū)動(dòng)器。如果沒(méi)有指定驅(qū)動(dòng)器,則RmDir會(huì)在當(dāng)前驅(qū)動(dòng)器上刪除目錄或文件夾。如果想要使用RmDir刪除一個(gè)含有文件的目錄或文件夾,則會(huì)發(fā)生錯(cuò)誤。只有用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 '是否有子目錄的標(biāo)志

  booldir = False  '初始化標(biāo)志

  spath = Dir1.Path  '選擇路徑

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

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

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

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

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

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

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

      End If

      sdir = Dir()

  Wend

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

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

  End If

End Sub

三、使用windows提供的API函數(shù)

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

CreateDirectory, CreateDirectoryEx

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

GetCurrentDirectory

在一個(gè)緩沖區(qū)中裝載當(dāng)前目錄

GetDiskFreeSpace,

GetDiskFreeSpaceEx

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

GetDriveType

判斷一個(gè)磁盤驅(qū)動(dòng)器的類型

GetFullPathName

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

GetLogicalDrives

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

GetLogicalDriveStrings

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

GetSystemDirectory

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

GetTempPath

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

GetVolumeInformation

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

GetWindowsDirectory

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

RemoveDirectory

刪除指定目錄

SetCurrentDirectory

設(shè)置當(dāng)前目錄

SetVolumeLabel

設(shè)置一個(gè)磁盤的卷標(biāo)(Label)

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

1、GetLogicalDrives

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

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

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

2、GetDriveType

作用:判斷一個(gè)磁盤驅(qū)動(dòng)器的類型

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

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

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

下面是示例代碼:

‘定義常數(shù)變量

Private Const DRIVE_CDROM = 5  ‘表示光盤驅(qū)動(dòng)器

Private Const DRIVE_FIXED = 3    ‘表示硬盤驅(qū)動(dòng)器

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

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

Private Const DRIVE_REMOVABLE = 2  ‘表示軟盤驅(qū)動(dòng)器

‘函數(shù)聲明

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:盤驅(qū)動(dòng)器類型

  Select Case temp      ‘比較

         Case DRIVE_CDROM

              MsgBox "DRIVE_CDROM: 光盤驅(qū)動(dòng)器"

         Case DRIVE_FIXED

              MsgBox "DRIVE_FIXED: 硬盤驅(qū)動(dòng)器"

         Case DRIVE_RAMDISK

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

         Case DRIVE_REMOTE

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

         Case DRIVE_REMOVABLE

              MsgBox "DRIVE_REMOVABLE: 軟盤驅(qū)動(dòng)器"

   End Select

End Sub

以上代碼可以判斷e:的類型。

3、GetDiskFreeSpaceEx

作用:獲取與一個(gè)磁盤的組織以及剩余空間容量有關(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ō)明:此函數(shù)的返回值類型為L(zhǎng)ong,非零表示成功,零表示失敗。會(huì)設(shè)置GetLastError.

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

參數(shù)說(shuō)明:

參數(shù)

類型及說(shuō)明

lpRootPathName

String,不包括卷名的磁盤根路徑名

lpFreeBytesAvailableToCaller

LARGE_INTEGER,指定一個(gè)變量,用于容納調(diào)用者可用的字節(jié)數(shù)量

lpTotalNumberOfBytes

LARGE_INTEGER,指定一個(gè)變量,用于容納磁盤上的總字節(jié)數(shù)

lpTotalNumberOfFreeBytes

LARGE_INTEGER,指定一個(gè)變量,用于容納磁盤上可用的字節(jié)數(shù)

LARGE_INTEGER結(jié)構(gòu)用來(lái)代表一個(gè)64位帶符號(hào)的整數(shù)值,它的定義如下:

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

其中l(wèi)owpart為 Long,指定低32位

highpart 為 Long,指定高32位

LARGE_INTEGER結(jié)構(gòu)與FILETIME結(jié)構(gòu)內(nèi)部完全一致。

請(qǐng)看下面示例:

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

lowpart As Long

highpart As Long

End Type

‘函數(shù)聲明

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:"

  ‘取得磁盤空間

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

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

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

 tempa = TotalNumberOfBytes.highpart * 65635 + TotalNumberOfBytes.lowpart ‘計(jì)算容量

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

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

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

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

  ‘取得磁盤可用空間

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

 tempb = TotalNumberOfFreeBytes.highpart * 1000 + TotalNumberOfFreeBytes.lowpart ‘計(jì)算

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

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

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

  ‘取得磁盤已用空間

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

 tempa = 0 – tempa  ‘調(diào)整

   tempc = tempa – tempb  ‘計(jì)算

   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ō)明:此函數(shù)的返回值類型為L(zhǎng)ong,非零表示成功,零表示失敗。會(huì)設(shè)置GetLastError

參數(shù)說(shuō)明:

參數(shù)

類型及說(shuō)明

lpTemplateDirectory

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

lpNewDirectory

String,新目錄的名字

lpSecurityAttributes

SECURITY_ATTRIBUTES,這個(gè)結(jié)構(gòu)定義了目錄的安全特性——如果操作系統(tǒng)支持的話

示例程序代碼如下:

‘定義結(jié)構(gòu)

Private Type SECURITY_ATTRIBUTES

   nLength As Long

   lpSecurityDescriptor As Long

   bInheritHandle As Long

End Type

‘函數(shù)聲明

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ō)明:此函數(shù)的返回值類型為L(zhǎng)ong,非零表示成功,零表示失敗。會(huì)設(shè)置GetLastError.

在調(diào)用這個(gè)函數(shù)前,目錄必須為空

參數(shù)說(shuō)明:

參數(shù)

類型及說(shuō)明

lpPathName

為String類型,要?jiǎng)h除的那個(gè)目錄的名字

示例代碼如下:

‘函數(shù)聲明

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

作用:設(shè)置當(dāng)前目錄

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

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

參數(shù)說(shuō)明:

參數(shù)

類型及說(shuō)明

LpPathName

String,新當(dāng)前目錄的路徑

示例代碼如下:

‘函數(shù)聲明

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

Private Sub form_load()

  SetCurrentDirectory "c:\"  ‘設(shè)置當(dāng)前目錄

End Sub

以上代碼將c:設(shè)置為當(dāng)前目錄

7、GetSystemDirectory

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

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

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

參數(shù)說(shuō)明:

參數(shù)

類型及說(shuō)明

lpBuffer

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

nSize

Long,lpBuffer字串的最大長(zhǎng)度

示例代碼如下:

‘函數(shù)聲明

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  ‘將系統(tǒng)路徑存放在buffer中

  MsgBox buffer   ‘顯示路徑

End Sub

以上代碼獲取了windows系統(tǒng)目錄的完整路徑。

第二部分  文件操作

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

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

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

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

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

一、使用現(xiàn)成的控件

(一)顯示文件

因?yàn)椴煌募拇鎯?chǔ)格式的差異,所以,只有用適當(dāng)?shù)姆椒ú拍苷_的顯示不同的文件。表現(xiàn)在表層,也就是不同的文件后綴名不同,而且不同的應(yīng)用軟件只能讀取和顯示某種或幾種不同格式的文件。如:以.DOC為后綴名的文件,用WORD就可以打開(kāi),但是用記事本就無(wú)法正確顯示.所以,VB中就給我們提供了不同的控件來(lái)顯示不同的文件。

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

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

Dim filepath as Sting

Dim strLine As String

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

    text1.text = “”

CommonDialog1.FileName = ""

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

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

'建立打開(kāi)方式的通用對(duì)話框,也可使用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文件系統(tǒng)對(duì)象,file對(duì)象,以及files集合。下面我們給出兩個(gè)例子,更多更詳細(xì)的內(nèi)容請(qǐng)參考前面目錄部分。

下面代碼舉例說(shuō)明了如何獲得一個(gè)file對(duì)象,以及如何察看它的一個(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

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

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

   Dim fs , f, f1,fc , s

   Set fs = CreateObject(“Scripting.FileSystemObject”)

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

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

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

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

s= s & vbCrLf

   Next 

   MsgBox s   ‘用對(duì)話框顯示信息

End Sub

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

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

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

  1、順序文件

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

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

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

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

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

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

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

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

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

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

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

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

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

2、隨機(jī)文件

操作隨機(jī)文件之前,首先必須定義用于保存數(shù)據(jù)項(xiàng)的記錄類型.該記錄是用戶自定義數(shù)據(jù)類型,他們是隨機(jī)文件中存儲(chǔ)數(shù)據(jù)的基本結(jié)構(gòu).例如:

Type Student

   No As Integer

   Name As String * 20

   age As Integer

End Type

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

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

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

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

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

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

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

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

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) 參數(shù)filename 和filenumber 分別表示文件名或文件號(hào).

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

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

我們可以用Seek()函數(shù)返回當(dāng)前的文件指針位置(即下一個(gè)要讀寫的字節(jié) );用Loc()函數(shù)返回上一次讀寫的字節(jié)位置,除非用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)的順序文件中讀取一行數(shù)據(jù)。這里的一行指的是從當(dāng)前指針位置開(kāi)始到回車符或回車換行符之間的所有數(shù)據(jù)。Line Input # 語(yǔ)句的語(yǔ)法格式如下:

Line Input # 文件號(hào),變量號(hào)

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

請(qǐng)看下面代碼:

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函數(shù)

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

變量 = Input(串長(zhǎng)度,文件號(hào))

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

file = Input(12,filenum)

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

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

(3)Input # 語(yǔ)句

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

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

Input # 文件號(hào),變量列表

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

Open "student.txt" For Output As #filenum

Write #filenum, "張三", "初一年級(jí)", 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

執(zhí)行結(jié)果:

name=”張三” ,nianji = “初一年級(jí)” ,age =14  

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

2、隨機(jī)文件

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

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

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

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

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

Get # 1,5,Student 

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

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

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

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

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

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

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

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

下面的代碼復(fù)制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

(三)寫文件

1、  順序文件

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

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

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

  Print # 文件號(hào),變量列表

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

Open "file.txt" For Output As #filenum

Input #filenum, text1.text

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

  Write # 文件號(hào),變量列表

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

Open "student.txt" For Output As #filenum

Write #filenum, "張三", "初一年級(jí)", 14

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

2、  隨機(jī)文件

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

Put [#] FileNum ,[RecNum],UserType

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

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

stud.No = 0301

stud.Name = “王武”

stud.Age =20

Put #1 ,5,stud

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

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

Put #1,Nextrec,UserType

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

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

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

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

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

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

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

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

三、使用windows提供的API函數(shù)

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

CloseHandle

關(guān)閉一個(gè)內(nèi)核對(duì)象。其中包括文件、文件映射、進(jìn)程、線程、安全和同步對(duì)象等。涉及文件處理時(shí),這個(gè)函數(shù)通常與vb的close命令相似。應(yīng)盡可能的使用close,因?yàn)樗С講b的差錯(cuò)控制。注意這個(gè)函數(shù)使用的文件句柄與vb的文件編號(hào)是完全不同的

CompareFileTime

根據(jù)FILETIME結(jié)構(gòu)的信息,對(duì)比兩個(gè)文件的時(shí)間

CopyFile

復(fù)制文件。與vb的filecopy命令相似

CreateFile

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

DeleteFile

刪除指定文件

FindClose

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

FindFirstFile

根據(jù)文件名查找文件

FindNextFile

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

FlushFileBuffers

針對(duì)指定的文件句柄,刷新內(nèi)部文件緩沖區(qū)

GetBinaryType

判斷文件是否可以執(zhí)行

GetFileAttributes

判斷指定文件的屬性

GetFileInformationByHandle

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

GetFileSize

判斷文件長(zhǎng)度

GetFileTime

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

GetFileType

在給出文件句柄的前提下,判斷文件類型

GetFileVersionInfo

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

GetFileVersionInfoSize

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

GetShortPathName

獲取指定文件的短路徑名

GetTempFileName

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

lclose

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

lcreat

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

llseek

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

LockFile

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

LockFileEx

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

lopen

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

lread

將文件中的數(shù)據(jù)讀入內(nèi)存緩沖區(qū)

lwrite

將數(shù)據(jù)從內(nèi)存緩沖區(qū)寫入一個(gè)文件

MoveFile, MoveFileEx

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

OpenFile

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

ReadFile

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

ReadFileEx

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

SearchPath

查找指定文件

SetEndOfFile

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

SetFileAttributes

設(shè)置文件屬性

SetFilePointer

在一個(gè)文件中設(shè)置當(dāng)前的讀寫位置

SetFileTime

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

UnlockFile

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

UnlockFileEx

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

WriteFile

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

WriteFileEx

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

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

1、CreateFile

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

聲明形式: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ō)明:此函數(shù)的返回值類型為L(zhǎng)ong,如執(zhí)行成功,則返回文件句柄。INVALID_HANDLE_VALUE表示出錯(cuò),會(huì)設(shè)置GetLastError。即使函數(shù)成功,但若文件存在,且指定了CREATE_ALWAYS 或 OPEN_ALWAYS,GetLastError也會(huì)設(shè)為ERROR_ALREADY_EXISTS

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

參數(shù)說(shuō)明:

參數(shù)

類型及說(shuō)明

lpFileName

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

dwDesiredAccess

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

dwShareMode

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

lpSecurityAttributes

SECURITY_ATTRIBUTES,指向一個(gè)SECURITY_ATTRIBUTES結(jié)構(gòu)的指針,定義了文件的安全特性(如果操作系統(tǒng)支持的話)

dwCreationDisposition

Long,下述常數(shù)之一:

CREATE_NEW

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

CREATE_ALWAYS

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

OPEN_EXISTING

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

OPEN_ALWAYS

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

TRUNCATE_EXISTING

講現(xiàn)有文件縮短為零長(zhǎng)度

dwFlagsAndAttributes

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

FILE_ATTRIBUTE_ARCHIVE

標(biāo)記歸檔屬性

FILE_ATTRIBUTE_COMPRESSED

將文件標(biāo)記為已壓縮,或者標(biāo)記為文件在目錄中的默認(rèn)壓縮方式

FILE_ATTRIBUTE_NORMAL

默認(rèn)屬性

FILE_ATTRIBUTE_HIDDEN

隱藏文件或目錄

FILE_ATTRIBUTE_READONLY

文件為只讀

FILE_ATTRIBUTE_SYSTEM

文件為系統(tǒng)文件

FILE_FLAG_WRITE_THROUGH

操作系統(tǒng)不得推遲對(duì)文件的寫操作

FILE_FLAG_OVERLAPPED

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

FILE_FLAG_NO_BUFFERING

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

FILE_FLAG_RANDOM_ACCESS

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

FILE_FLAG_SEQUENTIAL_SCAN

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

FILE_FLAG_DELETE_ON_CLOSE

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

也可在Windows NT下組合使用下述常數(shù)標(biāo)記:


SECURITY_ANONYMOUS, SECURITY_IDENTIFICATION, SECURITY_IMPERSONATION, SECURITY_DELEGATION, SECURITY_CONTEXT_TRACKING, SECURITY_EFFECTIVE_ONLY


hTemplateFile

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

示例如下:

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ì)將其縮短成零長(zhǎng)度,并將其打開(kāi),以便讀寫

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

說(shuō)明:此函數(shù)的返回值類型為L(zhǎng)ong,如執(zhí)行成功,返回打開(kāi)文件的句柄。如果出錯(cuò),則返回HFILE_ERROR

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

參數(shù)說(shuō)明:

參數(shù)

類型及說(shuō)明

lpPathName

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

iAttribute

Long,下述值之一
0——文件能夠讀寫
1——?jiǎng)?chuàng)建只讀文件
2——?jiǎng)?chuàng)建隱藏文件
3——?jiǎng)?chuàng)建系統(tǒ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ō)明:此函數(shù)的返回值類型為L(zhǎng)ong,如執(zhí)行成功,返回打開(kāi)文件的句柄。HFILE_ERROR表示出錯(cuò)。會(huì)設(shè)置GetLastError

CreateFile函數(shù)在win32下提供了更多的功能

參數(shù)說(shuō)明:

參數(shù)

類型及說(shuō)明

lpPathName

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

iReadWrite

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

1、訪問(wèn)模式


READ

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

READ_WRITE

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

WRITE

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

2、共享模式(參考OpenFile函數(shù)的標(biāo)志常數(shù)表)


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ì)設(shè)置GetLastError

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

參數(shù)說(shuō)明:

參數(shù)

類型及說(shuō)明

hFile

Long,文件的句柄

lpCreationTime

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

lpLastAccessTime

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

lpLastWriteTime

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

示例代碼如下:

‘函數(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

‘定義結(jié)構(gòu)

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

作用:復(fù)制文件。與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ì)設(shè)置GetLastError

參數(shù)說(shuō)明:

參數(shù)

類型及說(shuō)明

lpExistingFileName

String,源文件名

lpNewFileName

String,目標(biāo)文件名

bFailIfExists

Long,如果設(shè)為TRUE(非零),那么一旦目標(biāo)文件已經(jīng)存在,則函數(shù)調(diào)用會(huì)失敗。否則目標(biāo)文件被改寫

示例代碼如下:

‘函數(shù)聲明

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設(shè)為零,則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ì)設(shè)置GetLastError

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

參數(shù)說(shuō)明:

參數(shù)

類型及說(shuō)明

lpExistingFileName

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

lpNewFileName

String,新文件名

dwFlags

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

MOVEFILE_REPLACE_EXISTING

如目標(biāo)文件存在,則將其替換

MOVEFILE_COPY_ALLOWED

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

MOVEFILE_DELAY_UNTIL_REBOOT

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

示例代碼如下:

‘定義結(jié)構(gòu)

Private Const MOVEFILE_COPY_ALLOWED = &H2

Private Const MOVEFILE_DELAY_UNTIL_REBOOT = &H4

Private Const MOVEFILE_REPLACE_EXISTING = &H1

‘函數(shù)聲明

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í)現(xiàn)了文件的移動(dòng),兩次移動(dòng)後,文件不變

7、DeleteFile

作用:刪除指定文件

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

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

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

參數(shù)說(shuō)明:

參數(shù)

類型及說(shuō)明

lpFileName

String,欲刪除文件的名字

示例代碼如下:

‘函數(shù)聲明

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文件

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

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

聯(lián)系客服