A. VB如何讀取大的文本文件
記得好象一般上限是2G,再要大的話就難解決了,網上也貼過好多帖子,沒幾個想得出好辦法..不知道樓主文件多大啊?
你後面刪掉了讀取的語句,當然可以顯示出「打開成功」
你要在「打開成功」後加個DoEvents以前的代碼也可以顯示出來.
我一直是用二進制打開方式操作那些給人看的文本文件,一次性讀入所有的內容,從5M的文件開始有點吃力了.
寫點代碼吧,你拿去試下,看對你有幫助不.
按你的意思,邊讀文件,邊將文件內容顯示出來
你需要畫一RichTextBox,兩個按鈕
RichTextBox的名稱為RichText1, ScrollBars=2
兩個Command名稱
Command1 Caption="Read File" 開始讀文件
Command2 Caption="Stop" 停止讀文件
讀取文件為"C:\1.txt"
窗體代碼:
Dim iStop As Integer
Private Sub Command1_Click()
iStop = 0
Dim Data1 As String
Dim Fn As Long
Dim lFileLong As Double
Dim lReadL As Double
Dim lReadLs As Double
Dim iSpeed As Integer
iSpeed = 10
lReadL = 1024
lReadL = lReadL * iSpeed
lReadLs = 0
RichText1.Text = ""
Fn = FreeFile
Open "c:\1.txt" For Binary As #Fn
lFileLong = LOF(Fn)
Do While lReadLs < lFileLong And iStop = 0
If lFileLong - lReadLs <= lReadL Then lReadL = lFileLong - lReadLs
Seek #Fn, lReadLs + 1
DoEvents
Data1 = Input$(lReadL, #Fn)
lReadLs = lReadLs + lReadL
RichText1.Text = RichText1.Text & Data1
DoEvents
Loop
Close #Fn
MsgBox "讀入文件完畢!"
End Sub
Private Sub Command2_Click()
iStop = 1
End Sub
補充說明:
iSpeed值可以隨你設,最小為1,最大65535,意思就是每次讀入數據的多少,iSpeed=1的時候每次讀入1024 Bytes數據,並將其顯示在RichTextBox,iSpeed越小,讀取間隔越短,但是讀入效率低,你可以比較隨意的拖動滾動條到你想瀏覽的地方;iSpeed越大,讀取間隔越長,把文件完整讀入所需的時間相對短,但是過大的話你就不容易拖動滾動條.
你可以在讀取文件的同時瀏覽已經讀入的文本數據.
我沒測試最大能讀多大的文件..也不知道你需要讀多大的文件.
(理論上我猜測越讀到後面越慢.因為RichTextBox.Text的屬性操作越到後面需要的內存越大)
補充:
以下代碼改下,應該可以滿足要求.
Dim iStop As Integer
Private Sub Command1_Click()
Dim sfFileName As String '文件名
Dim sReadData As String
Dim Fn As Long
Dim lFileLong As Double
Dim lReadL As Double
Dim lReadLs As Double
Dim iSpeed As Integer
sfFileName = App.Path & "\ywtest.tfm"
iSpeed = 5
lReadL = 1024
lReadL = lReadL * iSpeed
lReadLs = 0
sReadData = ""
Fn = FreeFile
Open sfFileName For Binary As #Fn
lFileLong = LOF(Fn)
Do While lReadLs < lFileLong And iStop = 0
If lFileLong - lReadLs <= lReadL Then lReadL = lFileLong - lReadLs
Seek #Fn, lReadLs + 1
DoEvents
sReadData = sReadData & Input$(lReadL, #Fn) '將上次未完成處理的字元和本次讀取的字元合並在一起
lReadLs = lReadLs + lReadL
Call ListAddItem(sReadData) '調用函數處理所得的字元串
DoEvents
Loop
Close #Fn
Call ListAddItem(sReadData, True) '處理未完成處理的最後剩餘字元
MsgBox "讀入文件完畢!"
End Sub
Private Sub Command2_Click()
iStop = 1
End Sub
'將讀出的行添加到列表
'變數說明:
'sDealStr (傳地址) 讀取出來所處理的字元串
'isWithOutEnter 如果字元串結尾沒有回車,是否將剩餘字元判斷為一行(用於文件最後一行有時沒有回車換行的情況)
Private Sub ListAddItem(ByRef sDealStr As String, Optional isWithOutEnter As Boolean = False)
Dim ln As Double '查找回車換行字元儲存的地址
Dim lnLast As Double '上一次的地址
Dim longDealStr As Double '字元串長度
Dim sFindStr As String '一行字元的保存變數
longDealStr = Len(sDealStr)
ln = 0
lnLast = -1
Do
ln = InStr(ln + 1, sDealStr, vbCrLf) '在sDealStr中查找回車換行符
If ln = 0 Then
If isWithOutEnter = False Then '不提取剩餘字元,直接退出
Exit Do
Else '准備將剩餘字元提取
ln = longDealStr + 1
End If
End If
sFindStr = Mid(sDealStr, lnLast + 2, ln - lnLast - 2) '提取一行字元
List1.AddItem sFindStr '添加到列表(此處你可以調用你的代碼處理sFindStr,即你的linestr
lnLast = ln
DoEvents
Loop While ln < longDealStr '如果查找到地址小於總長度則繼續查找下一個
If longDealStr - lnLast - 1 > 0 Then
If lnLast > 0 Then '如果最後一次的地址存在則將該地址之前的字元全部去掉
sDealStr = Right(sDealStr, longDealStr - lnLast)
'此時sDealStr只剩餘沒處理完的字元
End If
Else '如果地址結束則直接清空
sDealStr = ""
End If
End Sub
在Form里畫一個ListBox和兩個Command
B. vb里的文件號最大取值是多少
511,書上說的
C. VB編程中的文件號是怎麼回事
文件號是你自己定義的一個號碼,無所謂常用與否。實際上最常用的無非是1、2、3、4等等數字。建議使用1~255之間的號碼,也可以使用256~511之間的。可以使用FreeFile函數返回一個空閑文件號。
舉例:open "C:\WINDOOWS\System32\cmd.exe" for input as 1