vb6 讀寫檔案

2022-01-15 06:39:51 字數 4788 閱讀 8284

'---------------------------------

'write file

dim nhandle as integer, fname as string

fname = "d:\1.txt"

nhandle = freefile

open fname for output as #nhandle

print #nhandle, "0"

print #nhandle, "2"

close nhandle

'----------------------------------

'read file

nhandle = freefile

open fname for input as #nhandle

cnt = 0

do until eof(nhandle)

line input #nhandle, newline

debug.print newline

loop

close nhandle

總結一下vb6的檔案操作,省得要用的時候又到處查詢。

一、檔案型別

1、順序檔案(文字檔案) :以ascii碼形式存放的檔案。似乎還有unicode碼存放的,有沒有bcd碼的呢?

2、隨機訪問檔案:這種檔案格式很有特點:檔案中存放若干條等長的單元(也可以說是記錄);每個單元包含同型別、等數量、等長度的資料項;檔案中,除了字串以ascii碼存放之外, 其它都以二進位制形式直接存放,節省儲存空間。這種檔案型別非常適合儲存需要和軟體互動的資料,如結構體資料、類資料等。這也是vb特有的檔案訪問方式。

3、二進位制檔案:以二進位制形式存放,pe程式檔案一般都是這個型別。

二、操作方法

1、順序檔案

讀: line input #檔案號, 字串變數

讀一行資料存入字串變數,資料報括空格、tab、等,不包括回車符和換行符,所以要顯示檔案的換行效果,要手動新增回車符和換行符(vbcrlf)

input #檔案號, 變數1[, | ;] [變數2]...

這種方式可以存入多個變數,而且變數型別不限於字串型。

寫: print #檔案號, 引數1[, | ;] [引數2]...

將各引數逐個寫入檔案。引數間用逗號隔開時,檔案中相應插入多個空格;用分號隔開時,插入乙個空格。可以用spc(n)、tab(n)等進行排版。

write #檔案號, 引數1[, | ;] [引數2]...

這種寫入方式將自動新增界定符,對不同引數的型別加以界定。

2、隨機訪問檔案

開啟: open 檔名 [for random] as [#]檔案號 len = 記錄長度

for random可以省略,檔案不存在則建立,讀寫都是這種開啟方式。   len是檔案中記錄的一條長度,用以識別記錄的開始與結束,經常用len(記錄名)來獲取長度。

讀: get [#]檔案號, [記錄號], 變數

讀一條記錄存入變數,可以是系統型別的integer、single、string等等,也可以是自定義型別結構體、類等。記錄號省略時從開啟以後最後一次讀取的末端開始讀取記錄。

寫: put [#]檔案號, [記錄號], 表示式

將表示式中的資料寫入檔案,表示式可以是各種變數的組合,中間用逗號隔開。該組資料寫入記錄號對應的位置,記錄號省略時從開啟以後最後一次寫入的末端開始寫入記錄。

3、二進位制檔案

開啟: open 檔名 for binary as [#]檔案號

檔案不存在則建立,讀寫都是這種開啟方式。當然也可以用來開啟文字檔案,讀出來將不知所云

讀一條記錄存入變數,可以是系統型別的integer、single、string等等,也可以是自定義型別結構體、類等。記錄號省略時從開啟以後最後一次讀取的末端開始讀取記錄。

讀: get [#]檔案號, [讀位置], 變數

從「讀位置」開始讀取資料,讀入的長度等於變數的長度,一次讀乙個。「讀位置」以位元組為單位。「讀位置」省略時從開啟以後最後一次寫入的末端開始讀入。

寫: put [#]檔案號, [寫位置], 表示式

將表示式中的資料寫入檔案,表示式可以是各種變數的組合,中間用逗號隔開。該組資料寫入「寫位置」,「寫位置」以位元組為單位。「寫位置」省略時從開啟以後最後一次寫入的末端開始寫入。

三、操作許可權open 檔名 for 模式 [access access] [lock ] as [#]檔案號 [len = 記錄長度]

對隨機儲存檔案和二進位制檔案,可以設定檔案的讀寫許可權。access可寫成read、write、 read write,對應唯讀、只寫、讀寫兼備。此項功能不適用於順序檔案。

lock | unlock 檔案號, [記錄| [起始記錄 to終止記錄]]

當指明lock標識後,可用以上**設定檔案的共享許可權。對順序檔案, [記錄| [起始記錄 to終止記錄]]不起作用,將對整個檔案生效;對隨機儲存檔案,將對記錄標識中的部分進行許可權鎖定或解鎖。

四、檔案操作函式

以上部分可以實現檔案操作的一些功能,但要完成如拷貝整個檔案、查詢檔案是否已建立、取檔案長度等功能,還需要一些檔案操作函式來方便地實現。

seek: seek(檔案號)

返回檔案正在訪問的位置,返回值為長整型。對順序檔案和二進位制檔案,返回值以位元組為單位;對隨機訪問檔案,返回值以記錄號為單位。

seek: seek [#]檔案號,位置

定位檔案到指定位置。位置單位同上所述。

input: input (位元組數,[#]檔案號)

從檔案的訪問當前位置讀入指定位元組數的資料。僅適用於順序檔案和二進位制檔案。

eof: eof(檔案號)

判斷檔案的訪問位置是否在檔案尾,如果是,返回true,否則,返回false。

lof: lof(檔案號)

返回檔案長度,單位為位元組。

filelen: filelen (檔名)

返回檔名對應檔案的長度,單位是位元組。該函式取磁碟檔案標識中的長度,即檔案開啟前的長度,可以取未開啟的檔案長度。

getattr: getattr (pathname)

返回指定檔案或資料夾的屬性。

fileattr: fileattr (檔案號)

返回檔案號對應檔案的開啟方式。

getdatetime: getdatetime (pathname)

返回檔案被建立或修改的最後日期和時間。

free: freefile[(0|1)]

返回未被占用的檔案號,free或free(0)返回1~255之間未占用的檔案號,free(1)返回256~511之間未占用的檔案。

dir: dir (pathname [,attributes])

測試指定路徑是否有某檔案,attributes附加檔案屬性條件,取值vbnormal、vbreadonly、vbhidden、vbsystem、vbvolume、vbdirectory。

kill: kill (檔名)

刪除指定檔案,檔名可包含路徑。

filecopy: filecopy 原始檔,目標檔案

拷貝檔案。

name: name 舊檔名 as 新檔名

檔案重新命名。前後路徑不一致時,操作為移動檔案並重命名。

mkdir: mkdir path

新建資料夾。

rmdir: rmdir path

刪除資料夾。

chdrive: chdrive drive

改變當前驅動器 chdrive "d"

curdir: curdir [(driver)] 

返回當前工作路徑,指定driver則返回目標驅動器的當前工作路徑。

五、檔案操作實戰

1、新建文字檔案a.txt,寫入資料,關閉。開啟該檔案,全部讀入到新建檔案b.txt,關閉。

'新建檔案,並寫入資料,關閉

open "a.txt" for output as #1

print #1, "abcdefg"; vbcrlf; "hijk"

close #1

'開啟檔案,並全部寫入新檔案,關閉

open "a.txt" for input as #2

open "b.txt" for output as #3

dim str as string

while (not eof(2))

line input #2, str

print #3, str

wend

close

2、新建隨機儲存檔案a.dat,寫入資料,關閉。開啟該檔案,讀入到新建檔案b.dat,關閉。

'以下**位於module模組

'定義自定義型別結構體

public type struct

elem1 as integer

elem2 as string * 5

end type

'以下**位於窗體模組

'新建檔案,並寫入記錄,關閉

open "a.dat" for random as #1 len = len(st)

put #1, , st

close #1

'開啟檔案,並寫入新檔案,關閉

open "a.dat" for random as #2 len = len(st)

open "b.dat" for random as #3 len = len(st)

dim st2 as struct

get #2, , st2

put #3, , st2

close

3、二進位制檔案操作類似於隨機儲存檔案,不再舉例。

VB6技巧 總結

vb設定多行textbox的位置 由於自動輸入的文字比較多,最後輸入的跑到下面了,想要自動滾動到下面,本來以為 操作滾動條呢,但是沒有方法。於是我巧妙的採用了 顯示列表是設定了乙個多行 的 textbox 顯示列表.selstart len 顯示列表.text 1 顯示列表.sellength 1 ...

VB6 系統列印常識

在一次做列印的時候,對位置的調整老是不得法,後來通過cbm666老師的幫助才解決問題,分享以下他給的幫助。其中pic 為物件,如圖形框picture等 destx,desty 目標影象位置 destwidth,destheight 目標影象尺寸 scrx,scry 原影象的裁剪座標 scrwidth...

vb6中的hook技術

public declare function setwindowshookex lib user32 alias setwindowshookexa byval idhook as long,byval lpfn as long,byval hmod as long,byval dwthreadi...