-1

我必须从文件夹中获取 2 种不同文件类型的列表,并以表格格式将其显示在电子邮件正文中。我的代码是:

Dim dat_files As String() = Directory.GetFiles("C:\~", "*.dat")
            Dim ctl_files As String() = Directory.GetFiles("C:\~", "*.ctl")

            For Each ctlfiles In ctl_files
                For Each datfiles In dat_files
                    Email(datfiles, ctlfiles)
                Next

            Next

电子邮件的代码是:

Public Shared Sub Email(ByVal datfiles, ByVal ctlfiles)

'一些代码

 Dim str As New StringBuilder

            Dim index As Integer = 0

            While index < datfiles.Count Or index < ctlfiles.Count
                str.Append("<tr>")
                str.Append("<td>" & datfiles.ElementAtOrDefault(index) & "</td>")
                str.Append("<td>" & ctlfiles.ElementAtOrDefault(index) & "</td>")
                str.Append("</tr>")

                index += 1
            End While
            objMail.Body = sb.ToString

这是行不通的。问题是没有得到邮件中的所有 dat & ctl 文件,因此无法在两个不同的列中显示它们。我知道要求太多,但有人可以帮忙。

这些是我所做的更改-

Dim dat_files As String() = Directory.GetFiles("C:\~", "*.dat")
            Dim ctl_files As String() = Directory.GetFiles("C:\~", "*.ctl")
            Email(dat_files, ctl_files)

电子邮件部分是-

 Public Shared Sub Email(ByVal datfiles As String(), ByVal ctlfiles As String())

Dim sb As New StringBuilder

            Dim index As Integer = 0

            While index < datfiles.Count Or index < ctlfiles.Count
                sb.Append("<tr>")
                sb.Append("<td>" & datfiles.ElementAtOrDefault(index) & "</td>")
                sb.Append("<td>" & ctlfiles.ElementAtOrDefault(index) & "</td>")
                sb.Append("</tr>")

                index += 1
            End While
            objMail.Body = sb.ToString

错误 - 'Count' is not a member of 'System.Array' 显示使用 count 或 ElementAtOrDefault

4

1 回答 1

0

为什么不?

在你的主要

        Dim dat_files As String() = Directory.GetFiles("C:\~", "*.dat")
        Dim ctl_files As String() = Directory.GetFiles("C:\~", "*.ctl")

        Email(dat_files, ctl_files)

以及 Email 方法本身

       Public Shared Sub Email(ByVal datfiles as String(), ByVal ctlfiles as String())

       Dim str As New StringBuilder

       Dim index As Integer = 0

       While index < datfiles.Count Or index < ctlfiles.Count
            str.Append("<tr>")
            str.Append("<td>" & datfiles.ElementAtOrDefault(index) & "</td>")
            str.Append("<td>" & ctlfiles.ElementAtOrDefault(index) & "</td>")
            str.Append("</tr>")

            index += 1
        End While
        objMail.Body = sb.ToString()

      End Sub

您正在传递一个字符串

  Email(datfiles, ctlfiles)

然后在 Email 方法中,您将 datfile 视为字符串数组,而实际上您将其作为简单字符串传递

  While index < datfiles.Count Or index < ctlfiles.Count 

.Count 方法适用于String()而不是String

如果您使用的是 Visual Studio 2008 及更高版本,这就是解决方案。

Imports System.IO

Module Module1

  Sub Main()

    Dim dat_files As String() = Directory.GetFiles("C:\test\", "*.dat")
    Dim ctl_files As String() = Directory.GetFiles("C:\test\", "*.ctl")
    Email(dat_files, ctl_files)

  End Sub


  Public Sub Email(ByVal datfiles As String(), ByVal ctlfiles As String())

    Dim sb As New System.Text.StringBuilder

    Dim index As Integer = 0

    While index < datfiles.Count Or index < ctlfiles.Count
        sb.Append("<tr>")
        sb.Append("<td>" & Path.GetFileName(datfiles.ElementAtOrDefault(index)) & "</td>")
        sb.Append("<td>" & Path.GetFileName(ctlfiles.ElementAtOrDefault(index)) & "</td>")
        sb.Append("</tr>")

        index += 1
    End While
    'objMail.Body = sb.ToString
    Debug.Print(sb.ToString())
  End Sub
End Module

如果您使用的是 Visual Studio 2005 及更低版本,这是解决方案:

它使用 Length 而不是Count,它使用像 datfiles(index) 这样的简单索引不是像 datfiles.ElementAtOrDefault(index) 这样的 ElementAtOrDefault()

导入系统.IO

Module Module1

  Sub Main()

    Dim dat_files As String() = Directory.GetFiles("C:\test\", "*.dat")
    Dim ctl_files As String() = Directory.GetFiles("C:\test\", "*.ctl")
    Email(dat_files, ctl_files)

  End Sub


  Public Sub Email(ByVal datfiles As String(), ByVal ctlfiles As String())

    Dim sb As New System.Text.StringBuilder

    Dim index As Integer = 0

    While index < datfiles.Length Or index < ctlfiles.Length
        sb.Append("<tr>")
        sb.Append("<td>" & Path.GetFileName(datfiles(index)) & "</td>")
        sb.Append("<td>" & Path.GetFileName(ctlfiles(index)) & "</td>")
        sb.Append("</tr>")

        index += 1
    End While
    'objMail.Body = sb.ToString
    Debug.Print(sb.ToString())
  End Sub
End Module
于 2013-05-02T08:32:39.913 回答