出于某种原因,我的程序没有读取我要求阅读的文件

时间:2014-01-22 19:56:21

标签: vb.net csv

你可以看到我刚打开下面的文件,但我最近发现它正在读取上面打开的文件,我已经关闭了。

    Dim TestNO As Integer
    Dim myLines As New List(Of String)
    Dim sb As StringBuilder

    FileOpen(10, "F:\Computing\Spelling Bee\testtests.csv", OpenMode.Input)

    Dim Item() As String = Split(fullline, ",")
    Dim MaxVal As Integer = Integer.MaxValue

    Do Until EOF(10)
        fullline = LineInput(10)

        If Item(7) > MaxVal Then
            MaxVal = Item(7)
            TestNO = MaxVal
        End If
    Loop

这是我打开和关闭以前文件的地方。

Dim flag As Boolean = False

FileOpen(1, "F:\Computing\Spelling Bee\stdnt&staffdtls\stdnt&staffdtls.csv",
             OpenMode.Input)

    Do Until EOF(1)
        fullline = LineInput(1)

        Dim item() As String = Split(fullline, ",")

        If enteredusername = item(0) And enteredpassword = item(1) Then

            Console.WriteLine()
            Console.Clear()
            Console.WriteLine("Welcome," & item(3) & item(4))

            Threading.Thread.Sleep(1000)
            Console.Clear()
            flag = True

            If item(2) = "p" Then
                FileClose(1)
                pupilmenu()
            ElseIf item(2) = "s" Then
                FileClose(1)
                staffmenu()
            ElseIf item(2) = "a" Then
                FileClose(1)
                adminmenu()

1 个答案:

答案 0 :(得分:0)

FileOpenEOFLineInput都是旧的VB6风格方法,主要是为了向后兼容。最好使用System.IO命名空间中提供的新.NET类。例如,这个相同的任务很容易执行:

For Each line As String In File.ReadAllLines("F:\Computing\Spelling Bee\stdnt&staffdtls\stdnt&staffdtls.csv")
    Dim fields() As String = line.Split(","c)
    If (enteredUserName = fields(0)) And (enteredPassword = fields(1)) Then
        ' ...
    End If
Next

请注意,我还使用了line.Split而不是Split(line),这也是一种旧的VB6风格的方法。最好使用新的String.Split方法。

File.ReadAllLines方法打开文件,读取文件的全部内容,关闭文件,然后将所有数据作为字符串数组返回,数组中的每个项目都是一行文件。这是一种读取整个文件的简单方法。但是,如果它是一个特别大的文件,最好使用FileStream对象一次读取一行。

另外,值得一提的是,自己阅读CSV文件可能很复杂。它们并不总是像简单地分割逗号一样简单。例如,以下是有效CSV行的示例:

Bill, "Red, White, and Blue", Smith

如您所见,该行只包含三个字段,但它包含四个逗号。此外,引号不应被视为第二个字段中值的一部分。读取CSV文件的最简单方法是使用TextFieldParser类来处理所有这些怪癖。