none
在VS2008里大家写VB读取文件都是用什么方法比较自由度大一点呢? RRS feed

  • 问题

  • 比如我需要以字节方式或者文本方式打开一个文件,然后读取一定字节(或者行)后又可以设置当前字节或者设置当前字符所在位置。

    怎么我在system.io.filestream里面没有找到什么方法呢?

    • 已移动 Vicky SongMicrosoft employee 2012年5月28日 3:24 VB issue (发件人:Visual Studio 相关讨论(Visual Studio 2010以前版本))
    2012年5月27日 7:33

答案

  • 比如我需要以字节方式或者文本方式打开一个文件,然后读取一定字节(或者行)后又可以设置当前字节或者设置当前字符所在位置。

    怎么我在system.io.filestream里面没有找到什么方法呢?

    建议用BinaryReader或者BinaryWriter方式:

    Dim br As New BinaryReader(New FileStream("c:\try1.txt", FileMode.OpenOrCreate), Encoding.[Default])
    Dim bytes As Byte() = New Byte(3) {}
    '读取一定字节(注意:一个汉字两个字节!)
    br.Read(bytes, 0, 4)
    Dim s As String = Encoding.[Default].GetString(bytes)
    Console.WriteLine(s)
    '就在第11个字节

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月28日 5:36
    版主
  • Decoder.GetCharCount可以获得指定字节之前的字符数。


    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP

    2012年6月2日 15:44
    版主
  • 问题是怎么获取当前字节的指向,并且改变它

    您好,请尝试使用这个方法:

    BinaryWriter的Seek方法——BinaryWriter专门用于写入二进制文件流的类。

    Imports Microsoft.Win32
    Imports System.Text
    Imports System.Threading.Tasks
    Imports System.Threading
    Imports System.Xml
    Imports System.IO
    
    Public Class Program
        Shared Sub Main(args As String())
            Dim bw As New BinaryWriter(New FileStream("c:\try.txt", FileMode.OpenOrCreate), Encoding.[Default])
            '写入随机数据
            For index = 1 To 10
                bw.Write(index)
            Next
            bw.Close()
    
            '读取文本文件内容
            Dim br As BinaryReader = New BinaryReader(New FileStream("c:\try.txt", FileMode.OpenOrCreate), Encoding.Default)
    
            For index = 1 To br.BaseStream.Length / 4
                Console.WriteLine(br.ReadInt32)
            Next
    
            br.Close()
    
            '重写第三个字节(把“3”改成“9”)
            bw = New BinaryWriter(New FileStream("c:\try.txt", FileMode.OpenOrCreate), Encoding.[Default])
            bw.Seek(8, SeekOrigin.Begin)   '第三个字节
            bw.Write(9)
            bw.Close()
    
            br = New BinaryReader(New FileStream("c:\try.txt", FileMode.OpenOrCreate), Encoding.Default)
            '重新读取内容
            For index = 1 To br.BaseStream.Length / 4
                Console.WriteLine(br.ReadInt32)
            Next
            br.Close()
        End Sub
    End Class

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年6月3日 0:10
    版主
  • 或许我可以将文本读入一个BYTE()数组,然后当前字符的指针就可以由我自己来控制了,很简明,不知道这样和文件流上的操作有什么区别没有?

    可以,用BinaryReader逐个读取,或者直接System.IO.File.ReadAllBytes一并读入。

    但是如果文件偏大不好处理,一下子全部加载到内存中了。

    然后写入使用System.IO.File.WriteAllBytes或者BinaryWriter。


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年6月5日 9:06
    版主

全部回复

  • 判断哪个字符在编码后位于第几个字节是System.Text里面的各种编码的事情……


    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP

    2012年5月28日 5:14
    版主
  • 比如我需要以字节方式或者文本方式打开一个文件,然后读取一定字节(或者行)后又可以设置当前字节或者设置当前字符所在位置。

    怎么我在system.io.filestream里面没有找到什么方法呢?

    建议用BinaryReader或者BinaryWriter方式:

    Dim br As New BinaryReader(New FileStream("c:\try1.txt", FileMode.OpenOrCreate), Encoding.[Default])
    Dim bytes As Byte() = New Byte(3) {}
    '读取一定字节(注意:一个汉字两个字节!)
    br.Read(bytes, 0, 4)
    Dim s As String = Encoding.[Default].GetString(bytes)
    Console.WriteLine(s)
    '就在第11个字节

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月28日 5:36
    版主
  • 问题是怎么获取当前字节的指向,并且改变它

    2012年6月2日 14:55
  • Decoder.GetCharCount可以获得指定字节之前的字符数。


    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP

    2012年6月2日 15:44
    版主
  • 问题是怎么获取当前字节的指向,并且改变它

    您好,请尝试使用这个方法:

    BinaryWriter的Seek方法——BinaryWriter专门用于写入二进制文件流的类。

    Imports Microsoft.Win32
    Imports System.Text
    Imports System.Threading.Tasks
    Imports System.Threading
    Imports System.Xml
    Imports System.IO
    
    Public Class Program
        Shared Sub Main(args As String())
            Dim bw As New BinaryWriter(New FileStream("c:\try.txt", FileMode.OpenOrCreate), Encoding.[Default])
            '写入随机数据
            For index = 1 To 10
                bw.Write(index)
            Next
            bw.Close()
    
            '读取文本文件内容
            Dim br As BinaryReader = New BinaryReader(New FileStream("c:\try.txt", FileMode.OpenOrCreate), Encoding.Default)
    
            For index = 1 To br.BaseStream.Length / 4
                Console.WriteLine(br.ReadInt32)
            Next
    
            br.Close()
    
            '重写第三个字节(把“3”改成“9”)
            bw = New BinaryWriter(New FileStream("c:\try.txt", FileMode.OpenOrCreate), Encoding.[Default])
            bw.Seek(8, SeekOrigin.Begin)   '第三个字节
            bw.Write(9)
            bw.Close()
    
            br = New BinaryReader(New FileStream("c:\try.txt", FileMode.OpenOrCreate), Encoding.Default)
            '重新读取内容
            For index = 1 To br.BaseStream.Length / 4
                Console.WriteLine(br.ReadInt32)
            Next
            br.Close()
        End Sub
    End Class

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年6月3日 0:10
    版主
  • 或许我可以将文本读入一个BYTE()数组,然后当前字符的指针就可以由我自己来控制了,很简明,不知道这样和文件流上的操作有什么区别没有?

    2012年6月5日 6:17
  • 或许我可以将文本读入一个BYTE()数组,然后当前字符的指针就可以由我自己来控制了,很简明,不知道这样和文件流上的操作有什么区别没有?

    可以,用BinaryReader逐个读取,或者直接System.IO.File.ReadAllBytes一并读入。

    但是如果文件偏大不好处理,一下子全部加载到内存中了。

    然后写入使用System.IO.File.WriteAllBytes或者BinaryWriter。


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年6月5日 9:06
    版主