How to copy a file from one directory to another directory by creating the folder if that folder does not exist

59,039

The following is not a directory.

Dim sourcepath As String = "C:\temp\test\1.txt"

Because you are using it as a directory in Directory.GetFiles(sourcePath).

Apart from that, I recommend to elaborate your questions more the next time. The code raises meaningful exceptions like DirectoryNotFoundException with the appropriate path as message or (if the file exists) an IOException with message "The directory name is invalid". You should have added that to the question.

So the solution simply is to remove the 1.txt from the directory-name:

Dim sourcepath As String = "C:\temp\test\"

If you need to copy only one file, use CopyTo method:

Dim sourcepath As String = "C:\temp\test\"
Dim DestPath As String = "C:\temp\Data\"
If Not Directory.Exists(DestPath) Then
    Directory.CreateDirectory(DestPath)
End If
Dim file = New FileInfo("C:\temp\test\1.txt")
file.CopyTo(Path.Combine(DestPath, file.Name), True)
Share:
59,039
user1101157
Author by

user1101157

Updated on April 29, 2020

Comments

  • user1101157
    user1101157 about 4 years

    I have some problem with copying the file from one directory to another directory by creating the folder if that folder does not exist in the destination directory.

    Example:

    • Source path: C:\temp\test\1.txt
    • Destination path: C:\Data\

    If C:\Data\ doesn't contain "temp" or "test" folder, it should create the folder before coping 1.txt.

    Copied to C:\Data\temp\test\1.txt

    Below is my code. But it doesn't work..

    Private Sub btnBackup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBackup.Click
              Dim sourcepath As String = "C:\temp\test\1.txt"
        Dim DestPath As String = "C:\Data\"
        CopyDirectory(sourcepath, DestPath)
    End Sub
    
    Private Shared Sub CopyDirectory(sourcePath As String, destPath As String)
        If Not Directory.Exists(destPath) Then
            Directory.CreateDirectory(destPath)
        End If
    
        For Each file__1 As String In Directory.GetFiles(sourcePath)
            Dim dest As String = Path.Combine(destPath, Path.GetFileName(file__1))
            File.Copy(file__1, dest)
        Next
    
        For Each folder As String In Directory.GetDirectories(sourcePath)
            Dim dest As String = Path.Combine(destPath, Path.GetFileName(folder))
            CopyDirectory(folder, dest)
        Next
    End Sub
    
  • user1101157
    user1101157 about 12 years
    I have a lot of text file but I want to copy 1.txt file only.
  • Tim Schmelter
    Tim Schmelter about 12 years
    @user1101157: Updated my answer.
  • Aurasphere
    Aurasphere about 8 years
    Welcome to StackOverflow! Please consider adding a little explanation to your code. Thank you!