Vb.net 读取CSV值的简单代码会导致System.IO.Directory中出现错误

Vb.net 读取CSV值的简单代码会导致System.IO.Directory中出现错误,vb.net,csv,directoryinfo,Vb.net,Csv,Directoryinfo,我似乎不明白为什么这段代码会出现编译错误,试图在目录中查找最近更新的文件(所有CSV文件),然后提取CSV的最后一行并更新设备 我得到的例外是: 第3行第10个字符应为语句结尾 不要担心hs.SetDevice,我知道这部分是正确的 Imports System.IO Sub Main() Dim path = System.IO.DirectoryInfo.GetFiles("C:\Users\Ian\Documents\Wifi Sensor Software"

我似乎不明白为什么这段代码会出现编译错误,试图在目录中查找最近更新的文件(所有CSV文件),然后提取CSV的最后一行并更新设备

我得到的例外是:

第3行第10个字符应为语句结尾

不要担心
hs.SetDevice
,我知道这部分是正确的

Imports System.IO

Sub Main()
    Dim path = System.IO.DirectoryInfo.GetFiles("C:\Users\Ian\Documents\Wifi Sensor Software").OrderByDescending(Function(f) f.LastWriteTime).First()
    Dim line = System.IO.File.ReadLines(path).Last()
    Dim fields() = line.Split(",".ToCharArray())
    Dim fileTemp = fields(2)
    hs.SetDeviceValueByRef(124, fileTemp, True)
End Sub
编辑:
将目录更改为
DirectoryInfo

  • 最初的问题是返回字符串数组,字符串没有
    LastWriteTime
    属性。
    此属性属于基类,即返回的对象类型。
    然后,无法将
    FileInfo
    对象传递到
    File.ReadLines()
    ,此方法需要一个字符串,因此需要传递
    [FileInfo].FullName

  • 以这种方式硬编码路径不是一件好事。用于获取特殊文件夹(如MyDocuments文件夹)的路径,并生成有效路径

  • 最好使用该类来解析CSV文件。它的使用非常简单,而且足够安全

最严重的问题设置为
Off

在项目的属性(
Project->Properties->Compile
)或Visual Studio的常规选项(
Tools->options->Projects and Solutions->VB Defaults
)中启用它,这样就可以为新项目设置它了。
您还可以将其添加到文件顶部,如下所示

使用对严格要求的
选项,当在您的代码中发现此类故障时,会立即通知您,以便您可以立即修复。
使用
选项Strict Off
,运行时出现的一些问题可能很难识别和修复。将其
设置为打开
以尝试稍后修复问题几乎是无用的,因为所有的故障都会一次发生,并且您将收到大量错误通知,这些错误通知将隐藏手头的问题

Option Strict On

Imports System.IO
Imports Microsoft.VisualBasic.FileIO

Dim filesPath = Path.Combine(Environment.GetFolderPath(
    Environment.SpecialFolder.MyDocuments), "Wifi Sensor Software")
Dim mostRecentFile = New DirectoryInfo(filesPath).
    GetFiles("*.csv").OrderByDescending(Function(f) f.LastWriteTime).First()

Using tfp As New TextFieldParser(mostRecentFile.FullName)
    tfp.TextFieldType = FieldType.Delimited
    tfp.SetDelimiters({","})

    Dim fileTemp As String = String.Empty
    Try
        While Not tfp.EndOfData
            fileTemp = tfp.ReadFields()(2)
        End While
    Catch fnfEx As FileNotFoundException
        MessageBox.Show($"File not found: {fnfEx.Message}")
    Catch exIDX As IndexOutOfRangeException
        MessageBox.Show($"Invalid Data format: {exIDX.Message}")
    Catch exIO As MalformedLineException
        MessageBox.Show($"Invalid Data format at line {exIO.Message}")
    End Try
  
    If Not String.IsNullOrEmpty(fileTemp) Then
        hs.SetDeviceValueByRef(124, fileTemp, True)
    End If
End Using

非常感谢你。我让它工作了。是我的错。我的环境设置不正确,我犯了初学者.net错误。谢谢你给了我一些东西来分析和提高我的.net技能。请小心基于
进行拆分,如果一个cel包含此字符,则所有操作都是以错误的方式进行的。