IOException было не обработано. Неверное имя файла или номер

Я написал это, чтобы прочитать выбранный индекс из файла и отобразить его детали, но у меня есть ошибка, указанная в заголовке.

Мой код:

'Declare variables
Dim OrdersFile As String
Dim NumRecsFound As Integer
Dim orderString As String
Dim searchID As Integer

'Find the selected order ID
orderString = lstOrder.Text
searchID = Val(Microsoft.VisualBasic.Left(orderString, 10))

'Set up the path to the orders file
OrdersFile = Application.StartupPath & "/orders.dat"

'Open the orders file in random access mode
FileOpen(1, OrdersFile, OpenMode.Random, , , Len(OrderRec))
'For each record in the file
RecPos = 1
'Read in every record until the end of the file is reached
Do While Not EOF(1)
    FileGet(1, OrderRec, RecPos)

    'If the record matches selected order, display the order file
    If OrderRec.OrderID = searchID Then
        NumRecsFound = NumRecsFound + 1

        With OrderRec
            txtOrderID.Text = .OrderID
            txtOrderDate.Text = .OrderDate
            txtPrice.Text = .Price
            cmbCustomers.Text = .CustomerID
            cmbPizza.Text = .PizzaID
        End With
    End If

    'Lock fields until edit is selected
    txtOrderID.Enabled = False
    txtFee.Enabled = False
    txtOrderDate.Enabled = False
    txtStatus.Enabled = False
    txtPrice.Enabled = False
    cmbCustomers.Enabled = False
    cmbPizza.Enabled = False

    'Close the orders file and leave the subroutine
    FileClose(1)

    'If the records don't match then get the next record
    RecPos = RecPos + 1
Loop

'If no records are found then output message and close the file
If NumRecsFound = 0 Then
    MsgBox("Order " & searchID & " could not be found. Please try again.")
    FileClose(1)
End If
FileClose(1)

ошибка появляется в строке 19; "Делай пока не EOF(1)"

Любая помощь будет оценена. Благодарю.

1 ответ

Вы говорите, что ошибка на линии

Do While Not EOF(1)
    FileGet(1, OrderRec, RecPos)
    .......

но у вас есть это

   'Close the orders file and leave the subroutine
    FileClose(1)

    'If the records don't match then get the next record
    RecPos = RecPos + 1
Loop

Так что, если у вас есть более одной записи, во втором цикле ваш код завершается с указанной ошибкой

Переместите вызов FleClose(1) за пределы цикла, когда вы действительно закончили читать свои записи....
Конечно, это оставляет проблему, связанную с более чем одной записью.

Наконец, мы находимся в VB.NET, старая функция VB6 должна быть сброшена как можно скорее. Так что, если вы просто не поддерживаете старый проект, потратьте некоторое время, чтобы изменить этот код для использования

String.substring
Int32.TryParse
StreamReader
Используя заявление

Не стесняйтесь добавлять.....

Другие вопросы по тегам