VB.Net 文件处理



  • 文件处理

    文件是存储在一个特定的名称和目录路径的磁盘数据的集合。打开文件进行读取或写入时,它成为。流基本上是通过通信路径的字节序列。主要有两个流:输入流输出流。输入流用于从文件(读操作)读取数据和输出数据流是用于写入到该文件中(写操作)。
  • VB.Net I/O类

    System.IO命名空间具有各种类,这些类用于对文件执行各种操作,例如创建和删除文件,从文件读取或写入文件,关闭文件等。
    下表显示了System.IO命名空间中一些常用的非抽象类-
    I/O类 描述
    BinaryReader 从二进制流中读取原始数据。
    BinaryWriter 以二进制格式写入原始数据。
    BufferedStream 字节流的临时存储。
    Directory 帮助操纵目录结构。
    DirectoryInfo 用于对目录执行操作。
    DriveInfo 提供驱动器的信息。
    File 帮助处理文件。
    FileInfo 用于对文件执行操作。
    FileStream 用于读取和写入文件中的任何位置。
    MemoryStream 用于随机访问存储在内存中的流数据。
    Path 对路径信息执行操作。
    StreamReader 用于读取字节流中的字符。
    StreamWriter 用于将字符写到流
  • FileStream 类

    System.IO命名空间中的FileStream类有助于读取,写入和关闭文件。该类派生自抽象类Stream。您需要创建一个FileStream对象来创建一个新文件或打开一个现有文件。创建FileStream对象的语法如下-
    
    Dim <object_name> As FileStream = New FileStream(<file_name>, <FileMode Enumerator>, <FileAccess Enumerator>, <FileShare Enumerator>)
    
    
    例如,创建FileStream对象F来读取名为sample.txt的文件-
    
    Dim f1 As FileStream = New FileStream("sample.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite)
    
    
    参数 描述
    FileMode FileMode枚举器定义了各种打开文件的方法。 FileMode枚举器的成员是-
    • Append 它会打开一个现有文件,并将光标放在文件末尾,或者如果文件不存在,则创建该文件。
    • Create 它创建一个新文件。
    • CreateNew 它向操作系统指定应创建一个新文件。
    • Open 它将打开一个现有文件。
    • OpenOrCreate 它向操作系统指定应打开一个文件(如果存在),否则应创建一个新文件。
    • Truncate 它打开一个现有文件,并将其大小截断为零字节。
    FileAccess FileAccess枚举器具有成员:Read,ReadWrite和Write。
    FileShare FileShare枚举器具有以下成员-
    • Inheritable 它允许文件句柄将继承传递给子进程
    • None 拒绝共享当前文件
    • Read 它允许打开文件进行读取
    • ReadWrite 它允许打开文件进行读写
    • Write 它允许打开文件进行写入
  • 示例

    以下程序演示了FileStream类的用法-
    
    Imports System.IO
    Module fileProg
       Sub Main()
          Dim f1 As FileStream = New FileStream("sample.txt", _ FileMode.OpenOrCreate, FileAccess.ReadWrite)
          Dim i As Integer
          
          For i = 0 To 20
             f1.WriteByte(CByte(i))
          Next i
          f1.Position = 0
          
          For i = 0 To 20
             Console.Write("{0} ", f1.ReadByte())
          Next i
          f1.Close()
          Console.ReadKey()
       End Sub
    End Module
    
    
    编译并执行上述代码后,将产生以下结果-
    
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -1
    
    
  • VB.Net中的高级文件操作

    前面的示例在VB.Net中提供了简单的文件操作。但是,要利用 System.IO类 的强大功能,您需要了解这些类的常用属性和方法。
    读取和写入文本文件 - 它涉及读取和写入文本文件。StreamReader的和StreamWriter类帮助来完成它。
    StreamReader的和StreamWriter类用于读取和写入数据的文本文件。这些类继承自抽象基类Stream,后者支持在文件流中读取和写入字节。
    StreamReader
    StreamReader类还从抽象基类的TextReader表示用于读字符系列的读取器继承。下表描述了StreamReader类的一些常用方法-
    方法 功能
    Public Overrides Sub Close 它关闭StreamReader对象和基础流,并释放与阅读器关联的所有系统资源。
    Public Overrides Function Peek As Integer 返回下一个可用字符,但不使用它。
    Public Overrides Function Read As Integer 从输入流中读取下一个字符,并将字符位置前进一个字符。
    例子
    下面的示例演示如何读取一个名为Jamaica.txt的文本文件。该文件读取-
    
    阳光
    在天上一闪
    又被乌云埋掩
    暴雨冲洗着
    我灵魂的底片
    
    
    
    Imports System.IO
    Module fileProg
       Sub Main()
          Try
             ' Create an instance of StreamReader to read from a file. 
             ' The using statement also closes the StreamReader. 
             Using sr As StreamReader = New StreamReader("e:/jamaica.txt")
                Dim line As String
                ' Read and display lines from the file until the end of  
                ' the file is reached. 
                line = sr.ReadLine()
                While (line <> Nothing)
                   Console.WriteLine(line)
                   line = sr.ReadLine()
                End While
             End Using
          Catch e As Exception
             ' Let the user know what went wrong.
             Console.WriteLine("The file could not be read:")
             Console.WriteLine(e.Message)
          End Try
          Console.ReadKey()
       End Sub
    End Module
    
    
    猜猜在编译和运行程序时显示什么!
    StreamWriter
    StreamWriter类继承了抽象类TextWriter,可以写一系列字符。
    下表显示了此类中一些最常用的方法-
    方法 功能
    Public Overrides Sub Close 关闭当前的StreamWriter对象和基础流。
    Public Overrides Sub Flush 清除当前写入器的所有缓冲区,并使所有缓冲的数据写入基础流。
    Public Overridable Sub Write (value As Boolean) 将布尔值的文本表示形式写入文本字符串或流。 (继承自TextWriter。)
    Public Overrides Sub Write (value As Char) 将字符写入流。
    Public Overridable Sub Write (value As Decimal) 将十进制值的文本表示形式写入文本字符串或流。
    Public Overridable Sub Write (value As Double) 将8字节浮点值的文本表示形式写入文本字符串或流。
    Public Overridable Sub Write (value As Integer) 将4字节有符号整数的文本表示形式写入文本字符串或流。
    Public Overrides Sub Write (value As String) 将字符串写入流。
    Public Overridable Sub WriteLine 将行终止符写入文本字符串或流。
    上面的列表并不详尽。有关方法的完整列表,请访问Microsoft的文档
    以下示例演示使用StreamWriter类将文本数据写入文件中-
    
    Imports System.IO
    Module fileProg
       Sub Main()
          Dim names As String() = New String() {"Zara Alex", _
             "Nuha Alex", "Amir Sohel", "M Amlan"}
          Dim s As String
          Using sw As StreamWriter = New StreamWriter("names.txt")
             For Each s In names
                sw.WriteLine(s)
             Next s
          End Using
          ' Read and show each line from the file. 
          Dim line As String
          Using sr As StreamReader = New StreamReader("names.txt")
             line = sr.ReadLine()
             While (line <> Nothing)
                Console.WriteLine(line)
                line = sr.ReadLine()
             End While
          End Using
          Console.ReadKey()
       End Sub
    End Module
    
    
    编译并执行上述代码后,将产生以下结果-
    
    Zara Alex
    Nuha Alex
    Amir Sohel
    M Amlan 
    
    
    读取和写入二进制文件 - 它涉及读取和写入二进制文件。 BinaryReader在和的BinaryWriter类帮助实现这一目标。
    BinaryReader
    BinaryReader 在类用于从文件中读取二进制数据。BinaryReader在对象通过使创造的FileStream对象给它的构造。
    下表显示了 BinaryReader 类的一些常用方法。
    方法 功能
    Public Overridable Sub Close 它关闭BinaryReader对象和基础流。
    Public Overridable Function Read As Integer 从基础流中读取字符并前进流的当前位置。
    Public Overridable Function ReadBoolean As Boolean 从当前流中读取布尔值,并将流的当前位置前移一个字节。
    Public Overridable Function ReadByte As Byte 从当前流中读取下一个字节,并将流的当前位置前移一个字节。
    Public Overridable Function ReadBytes (count As Integer) As Byte() 从当前流中将指定数量的字节读取到字节数组中,并将当前位置前移该字节数量。
    Public Overridable Function ReadChar As Char 从当前流中读取下一个字符,并根据使用的编码和从流中读取的特定字符来推进流的当前位置。
    Public Overridable Function ReadChars (count As Integer) As Char() 从当前流中读取指定数量的字符,返回字符数组中的数据,并根据所使用的编码和从流中读取的特定字符前进当前位置。
    Public Overridable Function ReadDouble As Double 从当前流中读取一个8字节的浮点值,并将该流的当前位置前移8个字节。
    Public Overridable Function ReadInt32 As Integer 从当前流中读取一个4字节有符号整数,并将该流的当前位置前移四个字节。
    Public Overridable Function ReadString As String 从当前流中读取一个字符串。该字符串以长度为前缀,一次编码为7位整数。
    BinaryWriter
    BinaryWriter 类用于二进制数据写入流。通过将 FileStream 对象传递给其构造函数来创建BinaryWriter对象。
    下表显示了BinaryWriter类的一些常用方法。
    方法 功能
    Public Overridable Sub Close 它关闭BinaryWriter对象和基础流。
    Public Overridable Sub Flush 清除当前写入器的所有缓冲区,并使所有缓冲的数据写入底层设备。
    Public Overridable Function Seek (offset As Integer, origin As SeekOrigin ) As Long 设置当前流中的位置。
    Public Overridable Sub Write (value As Boolean) 将一字节的布尔值写入当前流,其中0表示false,1表示true。
    Public Overridable Sub Write (value As Byte) 将无符号字节写入当前流,并将流位置前进一个字节。
    Public Overridable Sub Write (buffer As Byte()) 将字节数组写入基础流。
    Public Overridable Sub Write (ch As Char ) 根据使用的编码和写入到流中的特定字符,将Unicode字符写入当前流,并提高流的当前位置。
    Public Overridable Sub Write (chars As Char()) 根据使用的编码和写入到流中的特定字符,将字符数组写入当前流,并前进流的当前位置。
    Public Overridable Sub Write (value As Double ) 将一个八字节的浮点值写入当前流,并将流位置前进八个字节。
    Public Overridable Sub Write (value As Integer ) 将四个字节的有符号整数写入当前流,并将流位置前移四个字节。
    Public Overridable Sub Write (value As String ) 以BinaryWriter的当前编码方式向该流中写入一个带前缀的字符串,并根据所使用的编码和要写入该流中的特定字符来提高流的当前位置。
    - 以下示例演示了读写二进制数据-
    
    Imports System.IO
    Module fileProg
       Sub Main()
          Dim bw As BinaryWriter
          Dim br As BinaryReader
          Dim i As Integer = 25
          Dim d As Double = 3.14157
          Dim b As Boolean = True
          Dim s As String = "I am happy"
          'create the file
          
          Try
             bw = New BinaryWriter(New FileStream("mydata", FileMode.Create))
          Catch e As IOException
             Console.WriteLine(e.Message + "\n Cannot create file.")
             Return
          End Try
          'writing into the file
          
          Try
             bw.Write(i)
             bw.Write(d)
             bw.Write(b)
             bw.Write(s)
          Catch e As IOException
             Console.WriteLine(e.Message + "\n Cannot write to file.")
             Return
          End Try
          bw.Close()
          'reading from the file
          
          Try
             br = New BinaryReader(New FileStream("mydata", FileMode.Open))
          Catch e As IOException
             Console.WriteLine(e.Message + "\n Cannot open file.")
             Return
          End Try
          
          Try
             i = br.ReadInt32()
             Console.WriteLine("Integer data: {0}", i)
             d = br.ReadDouble()
             Console.WriteLine("Double data: {0}", d)
             b = br.ReadBoolean()
             Console.WriteLine("Boolean data: {0}", b)
             s = br.ReadString()
             Console.WriteLine("String data: {0}", s)
          Catch e As IOException
             Console.WriteLine(e.Message + "\n Cannot read from file.")
             Return
          End Try
          br.Close()
          Console.ReadKey()
       End Sub
    End Module
    
    
    编译并执行上述代码后,将产生以下结果-
    
    Integer data: 25
    Double data: 3.14157
    Boolean data: True
    String data: I am happy
    
    
    操纵Windows文件系统 -它使VB.Net程序员能够浏览和定位Windows文件和目录。
    VB.Net允许您使用各种与目录和文件相关的类(如DirectoryInfo类和FileInfo类)来处理目录和文件。
    DirectoryInfo
    DirectoryInfo的类是从派生FileSystemInfo类。它具有用于创建,移动和浏览目录和子目录的各种方法。这个类不能被继承。
    以下是一些常用的DirectoryInfo类的属性-
    属性 说明
    Attributes 获取当前文件或目录的属性。
    CreationTime 获取当前文件或目录的创建时间。
    Exists 获取一个布尔值,该布尔值指示目录是否存在。
    Extension 获取表示文件扩展名的字符串。
    FullName 获取目录或文件的完整路径。
    LastAccessTime 获取上次访问当前文件或目录的时间。
    Name 获取此DirectoryInfo实例的名称。
    以下是一些DirectoryInfo类的常用方法-
    方法 说明
    Public Sub Create 创建目录。
    Public Function CreateSubdirectory (path As String ) As DirectoryInfo 在指定的路径上创建一个或多个子目录。 指定的路径可以相对于DirectoryInfo类的此实例。
    Public Overrides Sub Delete 如果此DirectoryInfo为空,则删除它。
    Public Function GetDirectories As DirectoryInfo() 返回当前目录的子目录。
    Public Function GetFiles As FileInfo() 从当前目录返回文件列表。
    有关属性和方法的完整列表,请访问Microsoft的文档
    FileInfo
    FileInfo类是从派生FileSystemInfo类。它具有用于创建,复制,删除,移动和打开文件的属性和实例方法,并有助于创建FileStream对象。这个类不能被继承。
    属性 说明
    Attributes 获取当前文件的属性。
    CreationTime 获取当前文件的创建时间。
    Directory 获取文件所属目录的实例。
    Exists 获取一个布尔值,该值指示文件是否存在。
    Extension 获取表示文件扩展名的字符串。
    FullName 获取文件的完整路径。
    LastAccessTime 获取当前文件的最后访问时间。
    LastWriteTime 获取文件上一次写入活动的时间。
    Length 获取当前文件的大小(以字节为单位)。
    Name 获取文件名。
    以下是一些常用方法的的的FileInfo类-
    方法 说明
    Public Function AppendText As StreamWriter 创建一个StreamWriter,将文本追加到FileInfo的此实例表示的文件中。
    Public Function Create As FileStream 创建一个文件。
    Public Overrides Sub Delete 永久删除文件。
    Public Sub MoveTo (destFileName As String ) 将指定的文件移动到新位置,并提供指定新文件名的选项。
    Public Function Open (mode As FileMode) As FileStream 以指定模式打开文件。
    Public Function Open (mode As FileMode, access As FileAccess ) As FileStream 以指定的方式打开具有读取,写入或读取/写入访问权限的文件。
    Public Function Open (mode As FileMode, access As FileAccess, share As FileShare ) As FileStream 以具有读,写或读/写访问权限以及指定的共享选项的指定模式打开文件。
    Public Function OpenRead As FileStream 创建一个只读FileStream
    Public Function OpenWrite As FileStream 创建一个只写FileStream。
    有关属性和方法的完整列表,请访问Microsoft的文档
    以下示例演示了上述类的用法-
    
    Imports System.IO
    Module fileProg
       Sub Main()
          'creating a DirectoryInfo object
          Dim mydir As DirectoryInfo = New DirectoryInfo("c:\Windows")
          ' getting the files in the directory, their names and size
          Dim f As FileInfo() = mydir.GetFiles()
          Dim file As FileInfo
          
          For Each file In f
             Console.WriteLine("File Name: {0} Size: {1}  ", file.Name, file.Length)
          Next file
          Console.ReadKey()
       End Sub
    End Module
    
    
    编译并运行程序时,它将在Windows目录中显示文件名及其大小。