VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - 在Visual Basic .NET中文件I/O选项 (4)
发表评论(0)作者:不详, 平台:VB6.0+Win98, 阅读:9721, 日期:2002-12-22
对于刚刚开始熟悉这些新方法的 Visual Basic 程序员而言,不熟悉公共语言运行时可能会遇到一些困难。如果您是其中一员,您可能更倾向于使用您所熟知的方法。

  实现方法

  如上所述,许多 .NET 框架类(如 FileIOPermission)对于使用文件和目录进行工作的 Visual Basic 开发人员都十分有用。Imports 语句允许您在不使用完全限定名称的情况下引用命名空间中的类。

  代码示例

  以下示例使用 StreamReader 类来读取文本文件的内容。

Imports System
Imports System.IO
Function ReadTextFile(ByVal path As String) As String
 Dim sr As System.IO.StreamReader
 Dim Contents As String
 sr = New StreamReader(path)
 Contents = sr.ReadToEnd()
 sr.Close()
 Return Contents
End Function

以下代码与前面的示例顺序相反,它使用与 StreamWriter 类相同的方法来写入文本文件。

Imports System
Imports System.IO
Sub WriteTextFile(ByVal path As String, ByVal value As String)
Dim sr As StreamWriter
Dim Contents As String
 sr = New StreamWriter(path)
 sr.Write(value)
 sr.Close()
End Sub

  以下示例演示了如何使用 FileSystemWatcher 类来监视目录的变化。它声明 FileSystemWatcher 类的一个实例,提供要监视的路径,指示要监视的内容,然后创建一个事件处理程序来监视新文件的创建。

Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Serialization
Class WatchForNewFiles

  Shared Sub Main()
   Dim fw As New System.IO.FileSystemWatcher()
   注释: 要监视的路径。
   fw.Path = "C:\"

   注释: 监视文件。
   fw.NotifyFilter = System.IO.NotifyFilters.FileName
   fw.IncludeSubdirectories = True

   注释: 添加事件处理程序以监视文件创建。
   AddHandler fw.Created, _
    New System.IO.FileSystemEventHandler(AddressOf OnFileEvent)
   fw.EnableRaisingEvents = True
   Console.ReadLine()
  End Sub


注释: 新文件创建时生成的事件。
  Shared Sub OnFileEvent(ByVal source As Object, ByVal e As _
   System.IO.FileSystemEventArgs)
   Console.WriteLine("在 C: 中创建的新文件" & e.FullPath)
  End Sub

End Class


  以下示例说明了如何使用公共语言运行时类来保存 Visual Basic .NET 类。可以使用 BinaryFormatter 和 BinaryWriter/Binary Reader 类来保存,使用这种方法效率较高,但可读性略差。也可以使用 XMLSerializer 类和 FileStream 类,使用这种方法,移植性较强且易于读取,但效率较低。

Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Serialization
Public Module Module1
  Public Class class1
    Public classvar As Integer
  End Class

  Sub Main()
    Try
      Dim Result As Object
      注释: 创建并初始化要保存的类(序列化)。
      Dim myclass1 As New class1()
      myclass1.classvar = 7
      注释: 创建序列化程序。
      Dim xs As New XmlSerializer(GetType(class1))
      注释: 创建文件流。
      Dim FStream As New IO.FileStream("c:\xyz.txt", _
      IO.FileMode.OpenOrCreate)
      注释: 使用序列化程序编写类。
      xs.Serialize(FStream, myclass1)
      注释: 将文件流的位置重置到开始位置。
      Fstream.seek(0, IO.SeekOrigin.Begin)
      注释: 通过还原序列化到对象中来完成在类中的读取操作。
      Result = xs.Deserialize(FStream)
      FStream.Close()

      注释: 将文件流作为文本打开,以 XML 格式读取/打印类。
      console.WriteLine(readxml())

    Catch e As Exception
      console.WriteLine(e.ToString)
    End Try
  End Sub

  Function ReadXML() As String
    Dim MyReader As StreamReader = File.OpenText("c:\xyz.txt")
    Dim str As String
    Dim al As ArrayList = New ArrayList()

    Do
      str = MyReader.ReadLine()
      If str <> Nothing Then
        ReadXML &= str & vbcrlf
      End If
    Loop Until str = Nothing
    Return ReadXML
  End Function
End Module


  总结

  在这些方法中,不管是使用 Visual Basic .NET 运行时方法,采用 FileSystemObject 对象,还是使用 .NET 框架函数,根据不同的情况和应用程序,每种方法都各有利弊。对于需要处理大型文件的应用程序而言,使用公共语言运行时函数要比使用 FSO 方法好。对于要与在早期版本中 Visual Basic 编写的应用程序进行交互的应用程序而言,使用 Visual Basic 运行时方法可以达到更佳性能。在每种情况下,您都需要评估应用程序的需求、运行环境以及您驾驭不同方法的能力。

  正如您所看到的,从早期版本至今,Visual Basic 不断展示出新的功能,程序员的视野也不断得到扩大。对于大多数人来说,最好是将这些方法结合起来,从而可以根据应用程序的特定需要来选择不同的方法。您既可以继续使用熟悉的方法,也可以进一步探索新方法。