Get only part of file name and delete from server folder in asp.net vb

I’m trying get get only the last part of a file name in a server folder between the “_” and “.pdf” in order to delete specific files only.
The files in the invoices folder are like this: Invoice_12345.pdf, Invoice_2345.pdf, Invoice_5555.pdf, etc. I need to extract the “12345”, “2345”, and “5555”, then I need to delete the file if it is not contained in a database query.

With the following code, I wish to extract the digits from the files in the folder, so how do I get the number between “_” and “.pdf”?

Dim files() As String = Directory.GetFiles(Server.MapPath("/Contents/Invoices/"))
For Each file As String In files            
        list.Add(file)
    
Next

Then I need to delete the file from the server if the extracted number is not contained in a dataset I query from the database, but maybe that is a question for a different post.

For example, for Invoice "5555"
If PaidFull = True 
File.Delete(file)
End If

Of course, I would have to then get the full file name to delete if from the server at that point.

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

This is a way to get only the numbers :

  For Each file As String In files

            Dim the_number As String = Path.GetFileNameWithoutExtension(file)

            the_number = the_number.Substring(the_number.LastIndexOf("_") + 1, the_number.Length - the_number.LastIndexOf("_") - 1)


            list.Add(the_number )

        Next

Or with Regex (ty to Jimi) :

dim the_number = Regex.Match(file, "_(d+).").Groups(1).Value

Method 2

You really don’t need to mess with parsing the file name if you are sure the number won’t pop up somewhere in the directory path.

    'Dim list = Directory.GetFiles("C:SomeDirectory").ToList
    Dim myTestList As New List(Of String) From {"Invoice_12345.pdf", "Invoice_2345.pdf", "Invoice_5555.pdf"}
    For Each fileName In myTestList
        If fileName.Contains("5555") Then
            Debug.Print(fileName) 'Or do what you need to do
        End If
    Next


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x