错误的文件名或编号 (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
是一个数组而不是一个集合,并且在每个名称输出到控制台之前首先读取整个文件。不过,从用户的角度来看,它看起来是一样的。填充它们后,您几乎可以以完全相同的方式使用数组和集合。
我正在尝试将文件中的所有内容写入控制台,但我不断收到错误 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
是一个数组而不是一个集合,并且在每个名称输出到控制台之前首先读取整个文件。不过,从用户的角度来看,它看起来是一样的。填充它们后,您几乎可以以完全相同的方式使用数组和集合。