当前位置:编程学习 > VB >>

用binary方式逐个字节读取文件,咋末尾多出一个0字节?

用while not eof(1) 方式读整个文件,最后多get到一个值为0的字节!

困惑 --------------------编程问答-------------------- 检查你的文件 --------------------编程问答-------------------- 0表示字符串结束。忽略即可。 --------------------编程问答-------------------- 用ultraedit的16进制格式查看 没有0  怎可忽略? --------------------编程问答-------------------- 用mid把它去掉? --------------------编程问答-------------------- 不会有0的,是不是字节位数搞错了
--------------------编程问答--------------------
引用楼主 jack20042005 的回复:
用while not eof(1) 方式读整个文件,最后多get到一个值为0的字节!

困惑

放上你的代码.
我用以下代码测试读文本文件最后字节的值,没发现是0

Option Explicit
    Dim sj As Byte
    Dim i As Long
    Dim FileLength As Long
Private Sub Command1_Click()
    ' 设置“CancelError”为 True
    CommonDialog1.CancelError = True
    On Error GoTo ErrHandler
    ' 设置标志
    CommonDialog1.Flags = cdlOFNHideReadOnly
    ' 设置过滤器
    CommonDialog1.Filter = "All Files (*.*)|*.*|Text Files" & _
    "(*.txt)|*.txt|Batch Files (*.bat)|*.bat"
    ' 指定缺省的过滤器
    CommonDialog1.FilterIndex = 2
    ' 显示“打开”对话框
    CommonDialog1.ShowOpen
    ' 显示选定文件的名字
    Open CommonDialog1.FileName For Binary As #1
    FileLength = LOF(1)   ' 取得文件长度。
    Get #1, FileLength, sj
    Close #1
    Exit Sub
    
ErrHandler:
    ' 用户按了“取消”按钮
    Exit Sub
End Sub

Private Sub Command2_Click()
    Print FileLength
    Print sj
End Sub
--------------------编程问答-------------------- Dim Data() As Byte

Open "c:\test.bin" For Binary As #1
Redim Data(LOF(1) - 1)
Get #1, , Data
Close #1

Debug.Print Hex(Data(Ubound(Data))) --------------------编程问答-------------------- 楼主代码肯定写得有问题,应该贴上来 --------------------编程问答-------------------- 可能最后有一个空行吧…… --------------------编程问答-------------------- 最后一行是不是有回车,多出来一行啊 --------------------编程问答--------------------
引用 7 楼 of123 的回复:
Dim Data() As Byte

Open "c:\test.bin" For Binary As #1
Redim Data(LOF(1) - 1)
Get #1, , Data
Close #1

Debug.Print Hex(Data(Ubound(Data)))

验证一下即可! --------------------编程问答-------------------- dim mybyte as byte

Open "c:\test.txt" For Binary As #1
while not eof(1)
  get #1,,mybyte
    msgbox hex(mybyte)
wend
Close #1

问题出在哪儿?eof()函数的问题? --------------------编程问答--------------------
引用 10 楼 lijuan1215_2009 的回复:
最后一行是不是有回车,多出来一行啊


+1 --------------------编程问答-------------------- 怎么可能多一行 要是多一行用ultraedit是可以看到换行符的 --------------------编程问答-------------------- LZ所读到的字节是文件尾字节值.
见MSDN:
EOF 函数
返回一个 Integer,它包含 Boolean 值 True,表明已经到达为 Random 或顺序 Input 打开的文件的结尾。
语法
EOF(filenumber)
必要的 filenumber 参数是一个 Integer,包含任何有效的文件号。
说明
使用 EOF 是为了避免因试图在文件结尾处进行输入而产生的错误。
直到到达文件的结尾,EOF 函数都返回 False。对于为访问 Random 或 Binary 而打开的文件,直到最后一次执行的 Get 语句无法读出完整的记录时,EOF 都返回 False。
对于为访问 Binary 而打开的文件,在 EOF 函数返回 True 之前,试图使用 Input 函数读出整个文件的任何尝试都会导致错误发生。在用 Input 函数读出二进制文件时,要用 LOF 和 Loc 函数来替换 EOF 函数,或者将 Get 函数与 EOF 函数配合使用。对于为 Output 打开的文件,EOF 总是返回 True。

以下是试验读取一个43字节长度的文本文件图,从图可以看出名堂.


--------------------编程问答-------------------- 实际上LZ的循环
While Not EOF(1)

Wend
的终点是EOF(1)
补充:VB ,  控件
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,