1

下午,

如何在 VB.net 中定制以下函数以获取数组中文件名第二部分的前 8 个字符?

Private Function GetFormattedDateFromFileName(ByVal fileName As String) As String
    Dim parts() As String = fileName.Split("-")
    If parts.Length = 3 Then
        Dim dt As DateTime
        If DateTime.TryParseExact(parts(1), "yyyyMMdd", Nothing, Globalization.DateTimeStyles.None, dt) Then
            Return dt.ToString("MM/dd/yyyy")
        End If
    End If
    Return ""
End Function

我之前使用过这个函数,因为文件名会被分成 3 个部分,所以这对我来说很完美。文件名之前如下所示:

542656-20130402-FTO Disclosure.pdf
548872-20120501-Funds a.pdf
848581-20110215-Alpha.pdf

现在的问题是文件名结构已更改,现在将分为两部分,如下所示:

542656-20130402.pdf
548872-20120501.pdf
848581-20110215 Alpha.pdf
652162-20120711 a.pdf

那么我将如何定制上述函数以仍然用“-”分割文件名,而不是试图准确解析日期,因为它只查看第二部分的前 8 个字符(即日期)并像其他代码一样继续?

好心提醒。一个

4

1 回答 1

2

如果您将拆分呼叫和长度检查更改为:

Dim parts() As String = fileName.Split("-"c, "."c, " "c)
If parts.Length > 2 Then

那么现有代码应该在两个版本上都能正常工作。


编辑以回应评论:

为了在“12764-20120124b.pdf”之类的文件上进行这项工作,您只需直接提取子字符串:

Private Function GetFormattedDateFromFileName(ByVal fileName As String) As String
    Dim parts() As String = fileName.Split("-")
    If parts.Length > 1 AndAlso parts(1).Length >= 8 Then
        Dim dt As DateTime
        Dim dtStr = parts(1).Substring(0, 8)
        If DateTime.TryParseExact(dtStr, "yyyyMMdd", Nothing, Globalization.DateTimeStyles.None, dt) Then
            Return dt.ToString("MM/dd/yyyy")
        End If
    End If
    Return ""
End Function
于 2013-07-09T23:01:14.440 回答