表单加载时“不支持给定路径的格式”,

时间:2019-06-25 14:26:51

标签: vb.net

我正在申请学校。它有四个按钮,其中一个打开日志窗口。它获取每个文件夹中的所有文本文件,并将其显示在DataGridView中。所有这些都在域控制器上的映射网络驱动器上。当带有表的表单加载时,它引发“不支持给定路径的格式”。这是我的代码:

Imports System.IO

Public Class Form2
    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim dt As New DataTable
        dt.Columns.Add("Date/Time")
        dt.Columns.Add("Username")
        dt.Columns.Add("Room")
        For Each dir As String In Directory.GetDirectories("T:\(IncidentReport)\logs")
            Dim infoa As New IO.DirectoryInfo("T:\(IncidentReport)\logs\" + dir)
            Dim infob As IO.FileInfo() = infoa.GetFiles("*.txt")
            Dim infoc As IO.FileInfo
            For Each infoc In infob
                Dim log() As String
                log = File.ReadAllLines("T:\(IncidentReport)\logs\" + dir + "\" + infoc.Name)
                Dim row = dt.NewRow()
                row(0) = log(0)
                row(1) = log(2)
                row(2) = log(1)
                dt.Rows.Add(row)
            Next
        Next
        DataGridView1.DataSource = dt
    End Sub
End Class

有任何想法吗?有点卡在这里...

(我尝试将其更改为我拥有100%控制权的域用户的“用户区域”,

2 个答案:

答案 0 :(得分:1)

Directory.GetDirectories()函数返回FULL PATH字符串:

  

返回String []的全名(包括路径)的数组   指定路径中的子目录;如果没有,则返回一个空数组   目录。

所以在您的下一行代码中:

Dim infoa As New IO.DirectoryInfo("T:\(IncidentReport)\logs\" + dir)

您要将一个完整路径与另一个完整路径连接在一起,这显然行不通。

我将更像下面那样处理这些问题。此项重做将从您的主文件夹中创建DirectoryInfo,然后使用DirectoryInfo.GetDirectories()检索子文件夹。从那里,我们通过DirectoryInfo.GetFiles()遍历FileInfo实例。最后,我们使用FileInfo.FullName获取完整的路径文件名:

Dim dt As New DataTable
dt.Columns.Add("Date/Time")
dt.Columns.Add("Username")
dt.Columns.Add("Room")

Try
    Dim folder As New DirectoryInfo("T:\(IncidentReport)\logs")
    For Each subFolder As DirectoryInfo In folder.GetDirectories
        For Each FI As FileInfo In subFolder.GetFiles("*.txt")
            Dim lines() As String = File.ReadAllLines(FI.FullName)
            If lines.Length >= 3 Then
                dt.Rows.Add(New Object() {lines(0), lines(1), lines(2)})
            End If
        Next
    Next
Catch ex As Exception
    MessageBox.Show(ex.ToString, "Error Reading Files")
End Try

DataGridView1.DataSource = dt

答案 1 :(得分:0)

我们可以大大简化此代码。另外,永远不要错过将代码移出立即事件处理程序的机会,或者通过枚举项目而不是将它们全部加载到数组中来节省内存的机会:

int myfunction (int x, int y) 
{
    if(y>0)
        return x+y;
    return x;
}