elmonko
elmonko

Reputation: 685

Move files with certain extensions only

I'm currently using the Directory.Move method to copy files from one location to another. What i would like to do is only move files with certain extensions (.dbf, .ini & .txt). If the original folder doesn't contain any of these files then i just want to create an empty directory

Current code I'm using is...

Dim n As Integer

If lb1.SelectedItems.Count = 0 Then Exit Sub

For n = 0 To UBound(AllDetails)

    If AllDetails(n).uName & " - " & AllDetails(n).uCode & " - " & AllDetails(n).uOps = lb1.SelectedItem Then

        If Not My.Computer.FileSystem.DirectoryExists(aMailbox & "\" & AllDetails(n).uFile) Then
            Directory.Move(zMailbox & AllDetails(n).uFile, aMailbox & "\" & AllDetails(n).uFile)
            lb3.Items.Add(AllDetails(n).uName & " - " & AllDetails(n).uCode & " - " & AllDetails(n).uOps)
        Else

            lb3.Items.Add(AllDetails(n).uName & " - " & AllDetails(n).uCode & " - " & AllDetails(n).uOps)
            Exit Sub
        End If
    End If
Next

All the variables are declared and this works but moves the entire folder contents

Upvotes: 0

Views: 416

Answers (2)

tinstaafl
tinstaafl

Reputation: 6948

One way to approach this is to use each extension as a search pattern for File.GetFiles, then use Directory.Move on each file returned. Something like this might help:

    For Each OldFile As String In (From s In {".dbf", ".ini", ".txt"}
                                From f In Directory.GetFiles(zMailbox & AllDetails(n).uFile, s)
                                Select f)
        Directory.Move(OldFile, aMailbox & "\" & AllDetails(n).uFile & "\" & Path.GetFileName(OldFile))
    Next

Upvotes: 2

Malcolm Salvador
Malcolm Salvador

Reputation: 1566

if what you want is certain file extensions only? well Open File Dialog can filter that for you

Let's say you call this operation with a button click:

    Dim fd As OpenFileDialog = New OpenFileDialog()


    fd.Title = "Open File Dialog"
    fd.InitialDirectory = "the initial directory you want to look at first"

    'this filters the available files to be opened!
    fd.Filter = "dbf files|*.dbf*|ini files|*.ini*|Text files|*.txt*"
    fd.FilterIndex = 2 'set's the default files to open first as .ini
    fd.RestoreDirectory = True

    If fd.ShowDialog() = Windows.Forms.DialogResult.OK Then
        'Copy the file to the location using the copyer subroutin
        resulta.Text = fd.FileName.ToString
        Copyer(fd.FileName.Tostring, "the location where you want to copy")
    End If
End Sub

Now for the copying of the file, have a look at this subroutine. This subroutine checks first if the file exists. If it does, it deletes it, then copies the new file.

Public Sub Copyer(ByVal theFile As String, ByVal Lokasyon As String)
    Try

        Dim resultpath As String = Lokasyon
        If System.IO.File.Exists(resultpath) = True Then

            System.IO.File.Delete(resultpath) 
            'this deletes the file so you can overwrite it.
        End If
        My.Computer.FileSystem.CopyFile(theFile, resultpath)
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

Please let me know if this has helped you.

Upvotes: 0

Related Questions