错误的文件名或编号 (VB.NET)

Bad file name or number (VB.NET)

我正在尝试将文件中的所有内容写入控制台,但我不断收到错误 52:“文件名或编号错误”,我不确定我做错了什么。这是 visual studio 中的 VB16。正在读取的文件的名称是“example1.txt”。

Imports System
Imports System.IO

Module Program
    Sub Main()
        Dim name() As String = {}
        Dim i As Integer = 0
        FileOpen(1, "example1.txt", OpenMode.Input)
        While Not EOF(1)
            name(i) = LineInput(i)
            Console.WriteLine(name(i))
            i += 1
        End While
        FileClose(1)
        Console.ReadLine()

    End Sub
End Module

这里的具体问题是你打开文件时指定文件号为1:

FileOpen(1, "example1.txt", OpenMode.Input)

但是当你阅读这些行时你使用了不同的文件编号:

name(i) = LineInput(i)

您没有告诉 LineInput 阅读特定行。您告诉它从特定文件中读取下一行。那应该是:

name(i) = LineInput(1)

这是一个示例,说明为什么您不应在代码中使用幻数。把他们搞砸太容易了。如果您想在多个地方出于相同原因使用相同的值,请将其分配给一个变量甚至一个常量,然后每次都使用它:

Dim fileNumber = 1

FileOpen(fileNumber, "example1.txt", OpenMode.Input)

While Not EOF(fileNumber)
    name(i) = LineInput(fileNumber)

编辑:

要使用良好的 VB.NET 代码实现等效功能,您可以这样做:

Imports System.IO

Module Module1

    Sub Main()
        Dim names As New List(Of String)

        Using inputFile As New StreamReader("example1.txt")
            While Not inputFile.EndOfStream
                Dim name = inputFile.ReadLine()

                names.Add(name)
                Console.WriteLine(name)
            End While
        End Using

        Console.ReadLine()
    End Sub

End Module

或者这个:

Imports System.IO

Module Module1

    Sub Main()
        Dim names As New List(Of String)

        For Each name In File.ReadLines("example1.txt")
            names.Add(name)
            Console.WriteLine(name)
        Next

        Console.ReadLine()
    End Sub

End Module

或者这个:

Imports System.IO

Module Module1

    Sub Main()
        Dim names = File.ReadAllLines("example1.txt")

        For Each name In names
            Console.WriteLine(name)
        Next

        Console.ReadLine()
    End Sub

End Module

请注意,最后一个示例略有不同,因为 names 是一个数组而不是一个集合,并且在每个名称输出到控制台之前首先读取整个文件。不过,从用户的角度来看,它看起来是一样的。填充它们后,您几乎可以以完全相同的方式使用数组和集合。