简体   繁体   中英

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

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

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)
    Dim strMasterResourceDirectory As String
    Dim strDirectory As String

    strDirectory = "C:\TestDestination"
    strMasterResourceDirectory = "TestResource"

   If My.Computer.FileSystem.DirectoryExists(strDirectory) = False Then
        My.Computer.FileSystem.CreateDirectory(strDirectory)
    End If

    ' Loop through each file in the directory
    For Each file As IO.FileInfo In New IO.DirectoryInfo(strDirectory).GetFiles

        If file.Name <> "Thumbs.db" Then

            System.IO.File.Delete(strDirectory & "\" & file.Name)

        End If
    Next

    ' Loop through each file in the directory
    For Each file As IO.FileInfo In New IO.DirectoryInfo(strMasterResourceDirectory).GetFiles

        If file.Name <> "Thumbs.db" Then

            ' copy resource to users local directory

            file.CopyTo(strDirectory & "\" & file.Name)

        End If
    Next

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM