小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

談vb目錄文件操作的三種方法

 nxhujiee 2011-04-05


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

第一部分   目錄操作

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

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

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

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

他們在工具箱中的位置和圖標(biāo)如下所示:

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

"" 

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

屬性

Drive

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

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

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

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

事件

Change

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

下面是示例代碼:

   Private Sub Drive1_Change()

         Dir1.Path = Drive1.Drive 

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

   End Sub

2、目錄列表框

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

屬性

Path

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

示例:  Dri1.Path = Drive1.Drive 

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

ListIndex

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


ListCount

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

事件

Change

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

下面是示例代碼:

Private Sub Dir1_Change()

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

File1.Path = Dir1.Path

End Sub

3、文件列表框

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

屬性

Path

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

示例: File1.Path= Dri1.Path  

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

Pattern

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


FileName

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

事件

Click

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

下面是示例代碼:

Private Sub File1_Click()

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

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

End Sub

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

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

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

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

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

方法

所顯示的對話框

ShowOpen

ShowSave

ShowColor

ShowFont

ShowPrinter

Showhelp

顯示[打開]對話框

顯示[另存為]對話框

顯示[顏色]對話框

顯示[字體]對話框

顯示[打印]或[打印選項]對話框

顯示windows幫助引擎

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

屬性

Filer

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

Action

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


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

說明


0

1

2

3

4

5

6

沒有操作

顯示[打開]對話框

顯示[另存為]對話框

顯示[顏色]對話框

顯示[字體]對話框

顯示[打印]或[打印選項]對話框

運(yùn)行WINHLP32.EXE


FileName

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

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

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

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


事件

Click

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

下面是一個例子:

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

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

對象

特性

設(shè)置值

窗體

名稱

Frmvcd

BorderStyle

1

Caption

Vcd播放器

菜單

標(biāo)題

文件

名稱

Mnufile

標(biāo)題

打開


名稱

Mnuopen


標(biāo)題

播放


名稱

Mnuplay


標(biāo)題

退出


名稱

Mnuexit


標(biāo)題

選項

名稱

Mnuoption


標(biāo)題

連續(xù)播放


名稱

Mnurepeat


標(biāo)題

靜音


名稱

Mnuslient


多媒體控件

名稱

Mmcontrol

Picture控件

名稱

Picture1

通用對話框

名稱

Commondialog1

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

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

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

mnuplay.Enabled =False

CommonDialog1.FileName = ""

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

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

'初始化文件過濾方式為*.avi

CommonDialog1.FilterIndex = 1

'建立打開方式的通用對話框,也可使用commondialog1.showopen

CommonDialog1.Action = 1

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

MMControl1.Command = "close"

Select Case CommonDialog1.FilterIndex

    Case 1  '選擇*.avi

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

       MMControl1.DeviceType = "avividio"

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

       MMControl1.TimeFormat = 3

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

        MMControl1.FileName = CommonDialog1.FileName

       '打開文件

        MMControl1.Command = "open "

    Case 2 '選擇*.wav

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

       MMControl1.DeviceType = "waveaudio"

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

      MMControl1.TimeFormat = 3

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

       MMControl1.FileName = CommonDialog1.FileName

      '打開文件

       MMControl1.Command = "open "

    Case 3  '選擇*.dat

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

        MMControl1.DeviceType = "Mpegvidio"

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

       MMControl1.TimeFormat = 3

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

       MMControl1.FileName = CommonDialog1.FileName

       '打開文件

       MMControl1.Command = "open "

    Case 4  '選擇*.mid

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

       MMControl1.DeviceType = "waveaudio"

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

       MMControl1.TimeFormat = 3

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

       MMControl1.FileName = CommonDialog1.FileName

       '打開文件

       MMControl1.Command = "open "

End Select

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

MMControl1.hWndDisplay = Picture1.hWnd

End Sub

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

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

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

1、新建目錄

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

""2、修改文件夾名稱

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

""3、刪除文件夾

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

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

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

對象

功能

Drive

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

Folder

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

Files

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

FileSysterObject

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

TextStream

允許讀寫文本文件

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

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

Dim fso As New FileSystemObject

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

Dim fso As  Object ‘ 聲明對象變量

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

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

1、驅(qū)動器

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

下面代碼說明了如何獲得Drives集合,以及如何用For Eacn……Next語句來訪問該集合中的每個Drive:

  Sub ShowDriveList()

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

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

Set fs = CreatObject(“Scripting. FileSystemObject”)

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

Set dc= fs.Drives

‘取的驅(qū)動器對象

For Each d in dc

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

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

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

   Else

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

   End if

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

Next

MsgBox s          ‘顯示文本

End sub

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

Availablespace

驅(qū)動器已用空間

DriveLetter

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

Freespace

驅(qū)動器剩余空間

DriverType

驅(qū)動器類型

TotalSize

驅(qū)動器全部空間

FileSystem

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

IsReady

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

Path

驅(qū)動器根目錄

SerizlNumber

驅(qū)動器序列號

VolumeName

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

ShareName

驅(qū)動器共享名

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

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

  Dim fs As Object, d, s     

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

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

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

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

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

‘計算驅(qū)動器的剩余磁盤空間

  s = s & "Kbytes"

  MsgBox s    ‘顯示

  End Sub

下面是filesystemobject的其他方法

CreateFolder

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

CreateTextFile

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

DeleteFile

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

DeleteFolder

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

DriveExists

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

FileExists

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

FolderExists

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

GetDrive

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

GerDriveName

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

GetExtensionName

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

GetFile

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

GetFileName

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

GetFolder

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

GetParentFolderName

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

MoveFile

該方法的作用是將一個或多個文件從一個地方移動到另一個地方。

MoveFolder

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

OpenTextFile

該方法可用來打開一個指定的文件,并返回一個TextStream對象。用于讀文件或追加文件。

  2、文件夾

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

DateCreated

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

DateLastAccessed

返回最后一次訪問指定文件或文件夾的日期和時間

Drive

返回指定文件或文件夾所在的驅(qū)動器符號

Files

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

IsRootFolder

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

Name

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

ParentFolder

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

Path

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

ShortName

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

ShortPath

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

Size

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

SubFolders

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

Type

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

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

讓我們來看一看其中的各種屬性及其用法吧.

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

常數(shù)

說明

Normal

0

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

ReadOnly

1

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

Hidden

2

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

System

4

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

Volume

8

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

Directory

16

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

Archive

32

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

Alias

64

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

Compressed

128

為壓縮文件,屬性為只讀

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

下面是用法:

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

   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      ‘訪問folder集合中的每一個folder

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

s= s & vbCrLf

   Next 

   MsgBox s   ‘用對話框顯示信息

End Sub

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

下面代碼用一個文件舉例說明了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)于某個文件或文件夾類型的信息.例如對于以.TXT結(jié)尾的文本文件來說,本屬性會返回”Text Document”.下面的代碼舉例說明了返回某個文件夾類型的Type屬性的用法.在這個示例中,試圖將Recycle Bin的路徑或其他唯一的文件夾提供給過程.

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方法:

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

(2)CreateTextFile方法:

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

(3)Delete方法:

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

(4)Move

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

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

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

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

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

Sub CreateFolder(folderspec)

Dim fs

Set fs = CreatObject(“Scripting.FileSystemObject”)

fs.CreaterFolder(folderspec )

End sub

2、  刪除一個或多個文件夾

可以使用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、移動一個或多個文件夾

 可以使用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、一個或多個文件夾

     可以使用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所提供的語句對目錄操作

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

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

格式:MkDir  path

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

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

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

2、修改目錄名

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

格式:  Name  oldpathname  As newpathname

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

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

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

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

3、刪除目錄

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

格式:RmDir  path

作用:刪除一個目錄或文件夾。

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

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

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

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)志為假,該目錄下沒有子目錄

      MsgBox "該目錄下沒有子目錄"

  End If

End Sub

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

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

CreateDirectory, CreateDirectoryEx

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

GetCurrentDirectory

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

GetDiskFreeSpace,

GetDiskFreeSpaceEx

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

GetDriveType

判斷一個磁盤驅(qū)動器的類型

GetFullPathName

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

GetLogicalDrives

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

GetLogicalDriveStrings

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

GetSystemDirectory

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

GetTempPath

獲取為臨時文件指定的路徑

GetVolumeInformation

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

GetWindowsDirectory

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

RemoveDirectory

刪除指定目錄

SetCurrentDirectory

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

SetVolumeLabel

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

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

1、GetLogicalDrives

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

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

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

2、GetDriveType

作用:判斷一個磁盤驅(qū)動器的類型

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

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

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

下面是示例代碼:

‘定義常數(shù)變量

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

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

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

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

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

‘函數(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ū)動器類型

  Select Case temp      ‘比較

         Case DRIVE_CDROM

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

         Case DRIVE_FIXED

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

         Case DRIVE_RAMDISK

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

         Case DRIVE_REMOTE

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

         Case DRIVE_REMOVABLE

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

   End Select

End Sub

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

3、GetDiskFreeSpaceEx

作用:獲取與一個磁盤的組織以及剩余空間容量有關(guān)的信息

聲明形式:Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpRootPathName As String, lpFreeBytesAvailableToCaller As LARGE_INTEGER, lpTotalNumberOfBytes As LARGE_INTEGER, lpTotalNumberOfFreeBytes As LARGE_INTEGER) As Long

說明:此函數(shù)的返回值類型為Long,非零表示成功,零表示失敗。會設(shè)置GetLastError.

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

參數(shù)說明:

參數(shù)

類型及說明

lpRootPathName

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

lpFreeBytesAvailableToCaller

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

lpTotalNumberOfBytes

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

lpTotalNumberOfFreeBytes

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

LARGE_INTEGER結(jié)構(gòu)用來代表一個64位帶符號的整數(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)部完全一致。

請看下面示例:

Private Type LARGE_INTEGER  ' 8 Bytes,定義一個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 ‘計算容量

  tempa = 0 – tempa ‘我的驅(qū)動器大于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 ‘計算

  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  ‘計算

   tempc = 0 - tempc

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

End Sub

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

4、CreateDirectory, CreateDirectoryEx

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

聲明形式: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)

說明:此函數(shù)的返回值類型為Long,非零表示成功,零表示失敗。會設(shè)置GetLastError

參數(shù)說明:

參數(shù)

類型及說明

lpTemplateDirectory

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

lpNewDirectory

String,新目錄的名字

lpSecurityAttributes

SECURITY_ATTRIBUTES,這個結(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)建一個名為test的文件夾

5、RemoveDirectory

作用:移除一個目錄

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

說明:此函數(shù)的返回值類型為Long,非零表示成功,零表示失敗。會設(shè)置GetLastError.

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

參數(shù)說明:

參數(shù)

類型及說明

lpPathName

為String類型,要刪除的那個目錄的名字

示例代碼如下:

‘函數(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:下一個名為test的文件夾。

6、SetCurrentDirectory

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

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

說明:此函數(shù)的返回值類型為Long,非零表示成功,零表示失敗。會設(shè)置GetLastError

參數(shù)說明:

參數(shù)

類型及說明

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

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

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

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

參數(shù)說明:

參數(shù)

類型及說明

lpBuffer

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

nSize

Long,lpBuffer字串的最大長度

示例代碼如下:

‘函數(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)目錄的完整路徑。

第二部分  文件操作

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

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

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

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

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

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

(一)顯示文件

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

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

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

Dim filepath as Sting

Dim strLine As String

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

    text1.text = “”

CommonDialog1.FileName = ""

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

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

'建立打開方式的通用對話框,也可使用commondialog1.showopen

CommonDialog1.Action = 1

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

Open filepath For Input As #1    打開選擇的文件

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

        Line Input #1, strLine

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

Loop

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

 End Sub

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

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

Sub ShowFileInfo(filespec)

  Dim fs, f, s

  Set fs = CreateObject("scripting.FileSystemObject")

  Set f = fs.GetFile(filespec)

  s = f.DateCreated

  MsgBox s

End Sub

對于如何獲得一個files集合,以及如何用For Each……Next語句來訪問這個集合中的每個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對象

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

   For Each fi in fc      ‘訪問folder集合中的每一個folder

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

s= s & vbCrLf

   Next 

   MsgBox s   ‘用對話框顯示信息

End Sub

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

二、使用VisualBasic提供的語句

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

  1、順序文件

打開順序文件,我們可以使用Open語句。它的格式如下:

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

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

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

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

(4)當(dāng)在文件與程序之間拷貝數(shù)據(jù)時,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)建了一個名為test.dat的文本文件,分配文件號為1.

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

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

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

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

2、隨機(jī)文件

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

Type Student

   No As Integer

   Name As String * 20

   age As Integer

End Type

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

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

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

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

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

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

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

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

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

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

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

 Open pathname For Binary As [#]filenumber

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

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

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

我們可以用Seek()函數(shù)返回當(dāng)前的文件指針位置(即下一個要讀寫的字節(jié) );用Loc()函數(shù)返回上一次讀寫的字節(jié)位置,除非用Seek語句移動了指針,Loc()返回值總比Seek()的小1.我們來看下面的例子:

Open “student.txt”  for Binary as #1

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

(二)讀文件

1、順序文件

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

(1)Line Input # 語句

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

Line Input # 文件號,變量號

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

請看下面代碼:

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

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

(2)Input函數(shù)

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

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

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

file = Input(12,filenum)

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

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

(3)Input # 語句

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

下面使它的語法格式:

Input # 文件號,變量列表

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

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

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

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

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

2、隨機(jī)文件

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

語法格式: Get # FileNum ,[RecNum],UserType

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

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

下面是一個例子:

Get # 1,5,Student 

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

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

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

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

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

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

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

(3)Var是用來存放讀出的數(shù)據(jù)的變量.該語句會自動根據(jù)var變量包含的字節(jié)長度讀取適當(dāng)?shù)奈募?如果Var是一個可變長度的字符串變量,則傳送的字節(jié)數(shù)等于Var中目前的字節(jié)數(shù).對于文件長度的判斷我們可以使用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 #語句向一個已經(jīng)打開的文件中寫入數(shù)據(jù).

下面是他們的格式和說明:

Print # 的語法格式:

  Print # 文件號,變量列表

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

Open "file.txt" For Output As #filenum

Input #filenum, text1.text

Write # 語句的語法格式:

  Write # 文件號,變量列表

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

Open "student.txt" For Output As #filenum

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

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

2、  隨機(jī)文件

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

Put [#] FileNum ,[RecNum],UserType

說明: (1) FileNum 是要打開的文件號;RecNum是要寫入的記錄號,若省略,則再上一次用Get 和Put語句所讀寫過的記錄的后一條記錄中寫入,如果沒有執(zhí)行過Get 和Put語句,就從第一條記錄開始

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

stud.No = 0301

stud.Name = “王武”

stud.Age =20

Put #1 ,5,stud

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

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

Put #1,Nextrec,UserType

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

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

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

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

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

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

(3)Var是用來存放寫入的數(shù)據(jù)的變量.該語句會自動根據(jù)var變量包含的字節(jié)長度寫入文件,如果Var是一個可變長度的字符串變量,則傳送的字節(jié)數(shù)等于Var中目前的字節(jié)數(shù).

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

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

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

CloseHandle

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

CompareFileTime

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

CopyFile

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

CreateFile

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

DeleteFile

刪除指定文件

FindClose

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

FindFirstFile

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

FindNextFile

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

FlushFileBuffers

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

GetBinaryType

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

GetFileAttributes

判斷指定文件的屬性

GetFileInformationByHandle

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

GetFileSize

判斷文件長度

GetFileTime

取得指定文件的時間信息

GetFileType

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

GetFileVersionInfo

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

GetFileVersionInfoSize

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

GetShortPathName

獲取指定文件的短路徑名

GetTempFileName

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

lclose

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

lcreat

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

llseek

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

LockFile

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

LockFileEx

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

lopen

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

lread

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

lwrite

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

MoveFile, MoveFileEx

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

OpenFile

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

ReadFile

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

ReadFileEx

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

SearchPath

查找指定文件

SetEndOfFile

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

SetFileAttributes

設(shè)置文件屬性

SetFilePointer

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

SetFileTime

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

UnlockFile

解除對一個文件的鎖定

UnlockFileEx

解除對一個文件的鎖定

WriteFile

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

WriteFileEx

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

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

1、CreateFile

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

聲明形式: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

說明:此函數(shù)的返回值類型為Long,如執(zhí)行成功,則返回文件句柄。INVALID_HANDLE_VALUE表示出錯,會設(shè)置GetLastError。即使函數(shù)成功,但若文件存在,且指定了CREATE_ALWAYS 或 OPEN_ALWAYS,GetLastError也會設(shè)為ERROR_ALREADY_EXISTS

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

參數(shù)說明:

參數(shù)

類型及說明

lpFileName

String,要打開的文件的名字

dwDesiredAccess

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

dwShareMode

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

lpSecurityAttributes

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

dwCreationDisposition

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

CREATE_NEW

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

CREATE_ALWAYS

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

OPEN_EXISTING

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

OPEN_ALWAYS

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

TRUNCATE_EXISTING

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

dwFlagsAndAttributes

Long,一個或多個下述常數(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)不得推遲對文件的寫操作

FILE_FLAG_OVERLAPPED

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

FILE_FLAG_NO_BUFFERING

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

FILE_FLAG_RANDOM_ACCESS

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

FILE_FLAG_SEQUENTIAL_SCAN

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

FILE_FLAG_DELETE_ON_CLOSE

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

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


SECURITY_ANONYMOUS, SECURITY_IDENTIFICATION, SECURITY_IMPERSONATION, SECURITY_DELEGATION, SECURITY_CONTEXT_TRACKING, SECURITY_EFFECTIVE_ONLY


hTemplateFile

Long,如果不為零,則指定一個文件句柄。新文件將從這個文件中復(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)建一個文件。如文件已經(jīng)存在,就會將其縮短成零長度,并將其打開,以便讀寫

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

說明:此函數(shù)的返回值類型為Long,如執(zhí)行成功,返回打開文件的句柄。如果出錯,則返回HFILE_ERROR

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

參數(shù)說明:

參數(shù)

類型及說明

lpPathName

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

iAttribute

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

例如下面的語句打開c:\test.txt文件

lcreat “c:\test.txt”,0

3、lopen

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

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

說明:此函數(shù)的返回值類型為Long,如執(zhí)行成功,返回打開文件的句柄。HFILE_ERROR表示出錯。會設(shè)置GetLastError

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

參數(shù)說明:

參數(shù)

類型及說明

lpPathName

String,欲打開文件的名字

iReadWrite

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

1、訪問模式


READ

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

READ_WRITE

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

WRITE

打開文件,在其中寫入內(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

作用:取得指定文件的時間信息

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

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

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

參數(shù)說明:

參數(shù)

類型及說明

hFile

Long,文件的句柄

lpCreationTime

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

lpLastAccessTime

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

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

‘定義結(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) ‘打開文件

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

MsgBox CreationTime  ‘顯示信息

End Sub

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

5、CopyFile

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

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

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

參數(shù)說明:

參數(shù)

類型及說明

lpExistingFileName

String,源文件名

lpNewFileName

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

bFailIfExists

Long,如果設(shè)為TRUE(非零),那么一旦目標(biāo)文件已經(jīng)存在,則函數(shù)調(diào)用會失敗。否則目標(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

作用:移動文件。如dwFlags設(shè)為零,則MoveFile完全等價于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)

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

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

參數(shù)說明:

參數(shù)

類型及說明

lpExistingFileName

String,欲移動的文件名

lpNewFileName

String,新文件名

dwFlags

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

MOVEFILE_REPLACE_EXISTING

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

MOVEFILE_COPY_ALLOWED

如移動到一個不同的卷,則復(fù)制文件并刪除原來的文件

MOVEFILE_DELAY_UNTIL_REBOOT

移動操作在系統(tǒng)下次重新啟動時正式進(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" ‘移動文件

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

End Sub

以上代碼實(shí)現(xiàn)了文件的移動,兩次移動後,文件不變

7、DeleteFile

作用:刪除指定文件

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

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

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

參數(shù)說明:

參數(shù)

類型及說明

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

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

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多