[Last Call] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 379
  • Last Modified:

GetFiles mask

This should be easy but I'm stumped.  I am doing a Directory.GetFiles and want to only find files beginning with GP, having a character for the third spot, and ending in 5 digits plus an extension of ".inh".  It must be exactly that.

So for example, a filename might be GPW12345.INH.

I'd want to not find files such as GPW12345ABCDEFG.INH and GPWABCDE.INH.

I'd think a mask such as "GP?#####.INH" would work but it does not.  I tried "GP??????.INH" and it returns files longer than 8+3 in length.

How can I do this?

Thanks,
Chris
0
chlade
Asked:
chlade
  • 2
  • 2
2 Solutions
 
AutoeformsCommented:
something like this should do the trick.
please note i did not compile and test this.
but the idea is to get your list of INH files and then
rip through the array building a new array for all the files
that match your criteria.

hope this helps
greg

        Dim sFileName As String
        Dim sFileNameWithPath As String
        Dim sNewList() As String
        Dim iX As Integer = 0
        Dim sCh As String
        For Each sFileNameWithPath In sFiles
            sFileNAme = System.IO.Path.GetFileNameWithoutExtension(sFileNameWithPath)
            sCh = Mid(sfilename, 3, 1).toupper
            If sFileName.length > 8 Then
            elseIf sCH < "A" orelse _  sch > "Z" Then
            ElseIf IsNumeric(Mid(sfilename, 4, 5)) = False Then
            Else
                ReDim Preserve sNewList(iX)
                sNewList(iX) = sfilename
                iX += 1
            End If
        Next

Open in new window

0
 
chladeAuthor Commented:
Ok.  I thought of doing that but was hoping there was a way to do it via a file mask so that I don't have to loop through all of them.

Is that possible or am I left with no option other than to loop through them?
0
 
AutoeformsCommented:
none that i know of.
i would build it as a function call and have it return the result you want

g
0
 
VBRocksCommented:
I think you are actually going to have to loop through them, but here's an example of how you can
search for a match using RegEx:

        Dim pattern As String = "GP[A-Z,a-z][0-9]{5}.INH"    'pattern to serach for
        Dim match As System.Text.RegularExpressions.Match

        Dim list As New List(Of IO.FileInfo)
        For Each fil As IO.FileInfo In _
            New IO.DirectoryInfo("C:\TEMP\Test").GetFiles("GP*.INH")

            match = System.Text.RegularExpressions.Regex.Match(fil.Name, pattern)

            If match.Success = True Then
                list.Add(fil)
            End If

        Next


        'View list:
        For Each item As IO.FileInfo In list
            Debug.WriteLine(item.Name)

        Next

0
 
chladeAuthor Commented:
Thanks for the help!
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now