FileOpen 函数

更新:2007 年 11 月

打开输入或输出文件。

在文件 I/O 操作中,My 功能具有比 FileOpen 更高的效率和更好的性能。有关更多信息,请参见 My.Computer.FileSystem 对象

Public Sub FileOpen( _
   ByVal FileNumber As Integer, _
   ByVal FileName As String, _
   ByVal Mode As OpenMode, _
   Optional ByVal Access As OpenAccess = OpenAccess.Default, _
   Optional ByVal Share As OpenShare = OpenShare.Default, _
   Optional ByVal RecordLength As Integer = -1 _
)

参数

  • FileNumber
    必需。任何有效文件号。使用 FreeFile 函数可获取下一个可用的文件号。

  • FileName
    必需。指定文件名的 String 表达式,该文件名可以包括目录(或文件夹)和驱动器。

  • Mode
    必需。指定文件模式的枚举:Append、Binary、Input、Output 或 Random。(有关更多信息,请参见 OpenMode 枚举。)

  • Access
    可选。指定在打开的文件上允许的操作的枚举:Read、Write 或 ReadWrite。默认为 ReadWrite。(有关更多信息,请参见 OpenAccess 枚举。)

  • Share
    可选。指定其他进程不允许在打开的文件上执行的操作的枚举:Shared、Lock Read、Lock Write 和 Lock Read Write。默认为 Lock Read Write。(有关更多信息,请参见 OpenShare 枚举。)

  • RecordLength
    可选。小于或等于 32,767(字节)的数。对于以随机访问模式打开的文件,此值是记录长度。对于顺序文件,该值是存入缓冲区的字符数。

异常

异常类型

错误号

条件

ArgumentException

5

无效的 Access、Share 或 Mode。

ArgumentException

5

WriteOnly 文件打开以用于 Input。

ArgumentException

5

ReadOnly 文件打开以用于 Output。

ArgumentException

5

ReadOnly 文件打开以用于 Append。

ArgumentException

5

记录长度是负数(并且不等于 -1)。

IOException

52

FileNumber 无效(<-1 或 >255),或 FileNumber 已被使用。

IOException

55

FileName 已经打开,或 FileName 无效。

如果正在升级使用非结构化错误处理方式的 Visual Basic 6.0 应用程序,请参见“错误号”一列。(您可以根据 Number 属性(Err 对象) 比较错误号。) 然而,如果可能,应当考虑用 Visual Basic 的结构化异常处理概述 替换这种错误控制。

备注

提供 FileOpen 函数是为了实现向后兼容性,可能影响性能。对于非旧式应用程序,My.Computer.FileSystem 对象将提供更好的性能。有关更多信息,请参见 使用 Visual Basic 访问文件

您必须先打开文件,才能在此文件上执行任何 I/O 操作。FileOpen 将用于 I/O 的缓冲区分配到文件,并确定对此缓冲区使用的访问模式。

安全说明:

写入文件时,如果尝试写入的文件不存在,应用程序可能需要创建一个文件。为此,应用程序需要具有创建该文件所在的那个目录的写权限。但是,如果 FileName 指定的文件的确存在,则应用程序只需要该文件本身的 Write 权限。为帮助提高安全性,尽可能地在部署时创建该文件并且只授予对该文件的 Write 权限,而不是授予对整个目录的写权限。为了帮助提高安全性,请将数据写入用户目录,而非根目录或 Program Files 目录。

可用 FreeFile() 函数找到要打开的信道。

安全说明:

FileOpen 函数需要 FileIOPermissionAccess 枚举的 Read 访问权限,在部分信任情况下可能会影响其执行。有关更多信息,请参见 FileIOPermissionAccess 枚举和 请求权限

示例

本示例阐释 FileOpen 函数启用文件输入和输出的不同用法。

下面的代码以 Input 模式打开文件 TestFile。

FileOpen(1, "TESTFILE", OpenMode.Input)
' Close before reopening in another mode.
FileClose(1)

该示例以 Binary 模式打开该文件进行只写操作。

FileOpen(1, "TESTFILE", OpenMode.Binary,OpenAccess.Write)
' Close before reopening in another mode.
FileClose(1)

下面的示例以 Random 模式打开该文件。该文件包含结构 Person 的记录。

Structure Person
    <VBFixedString(30)> Dim Name As String
    Dim ID As Integer
End Structure
Public Sub ExampleMethod()
    ' Count 30 for the string, plus 4 for the integer.
    FileOpen(1, "TESTFILE", OpenMode.Random, , , 34)
    ' Close before reopening in another mode.
    FileClose(1)
End Sub

该代码示例以 Output 模式打开该文件;任何进程都可以读取或写入该文件。

FileOpen(1, "TESTFILE", OpenMode.Output, OpenAccess.Default, OpenShare.Shared)
' Close before reopening in another mode.
FileClose(1)

该代码示例以 Binary 模式打开该文件进行读取;其他进程无法读取该文件。

FileOpen(1, "TESTFILE", OpenMode.Binary, OpenAccess.Read, _
   OpenShare.LockRead)

智能设备开发人员说明

不支持此函数。

要求

命名空间:Microsoft.VisualBasic

**模块:**FileSystem

**程序集:**Visual Basic 运行库(在 Microsoft.VisualBasic.dll 中)

请参见

参考

FileClose 函数

FreeFile 函数

其他资源

读取文件 (Visual Basic)

写入文件 (Visual Basic)