Как скопировать HTML-файл вместе со всеми связанными изображениями и папками скриптов? - PullRequest
0 голосов
/ 22 марта 2011

Я хочу скопировать файл HTML из одного места в другое, используя VB.net.
Когда я использую любой из трех файлов FileCopy, System.IO.File.Copy, My.Computer.FileSystem.CopyFile он копирует только файл, а не папку «filename_files», которая содержит связанные изображения и сценарии.

То, что я хочу сделать программно, это скопировать a.html в другое место как b.html

когда я делаю это и открываю b.html, он открывается без каких-либо изображений и сценариев.

Пожалуйста, помогите

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Вы можете использовать следующие два метода, которые вместе могут копировать папку, которая включает в себя сценарии и изображения, таким образом, с помощью встроенного метода FileCopy скопируйте ваш HTML-файл, а с помощью следующих методов скопируйте нужную папку.

Я нашел первый метод, который возвращает массив файлов по заданному пути в здесь

Public Function FileList(Mask As String) As String()

    Dim sWkg As String
    Dim sAns() As String
    Dim lCtr As Long

    ReDim sAns(0) As String
    sWkg = Dir(Mask, vbNormal)

    Do While Len(sWkg)

        If sAns(0) = "" Then
            sAns(0) = sWkg
        Else
            lCtr = UBound(sAns) + 1
            ReDim Preserve sAns(lCtr) As String
            sAns(lCtr) = sWkg
        End If
        sWkg = Dir
   Loop
   FileList = sAns
End Function

Теперь, используя вышеуказанный метод и метод ниже, вы можете скопировать папку, указавИсходные и целевые пути.Метод вернет логическое значение, указывающее, была ли скопирована папка.

Public Function FolderCopy(ByVal SourceFolder As String, ByVal TargetFolder As String) As Boolean
    Dim flist() As String
    Dim sURL As String = New String(SourceFolder)
    Dim tURL As String = New String(TargetFolder)
    Dim i As Integer
    Dim slashpos As Long
    If Not Directory.Exists(tURL) Then

        slashpos = InStrRev(sURL, "\") 'Get position of last occurrence if '\' in given path
        If slashpos <> sURL.Length Then 'Check if URL does not have slash at its end
            sURL = sURL & "\" 'Add slash at URL end
        End If

        flist = FileList(sURL)
        slashpos = InStrRev(tURL, "\") 'Get position of last occurrence if '\' in given path
        If slashpos = tURL.Length Then
            tURL = tURL.Substring(0, tURL.Length - 1)
        End If
        slashpos = InStrRev(tURL, "\")

        Try
            Directory.CreateDirectory(tURL)
            For i = 0 To flist.Length - 1
                FileCopy(sURL & flist(i), tURL & "\" & flist(i))
            Next
            FolderCopy = True
        Catch ex As Exception
            FolderCopy = False
        End Try

    Else
        FolderCopy = False
    End If
End Function

Убедитесь, что вы включили Imports System.IO в начале класса, прежде чем использовать метод FolderCopy, и обратите внимание, что оба эти методадолжны быть включены.

0 голосов
/ 24 марта 2011
' copy all files and subdirectories from the
' specified source to the specified destination.
Private Sub RecursiveCopyFiles( ByVal sourceDir As String, ByVal destDir As String, _
ByVal fRecursive As Boolean)

    Dim i As Integer
    Dim posSep As Integer
    Dim sDir As String
    Dim aDirs() As String
    Dim sFile As String
    Dim aFiles() As String

    ' Add trailing separators to the supplied paths if they don't exist.
    If Not sourceDir.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString()) Then 
         sourceDir &= System.IO.Path.DirectorySeparatorChar
    End If

    If Not destDir.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString()) Then
         destDir &= System.IO.Path.DirectorySeparatorChar
    End If

    ' Recursive switch to continue drilling down into dir structure.
    If fRecursive Then
        ' Get a list of directories from the current parent.
        aDirs = System.IO.Directory.GetDirectories(sourceDir)

        For i = 0 To aDirs.GetUpperBound(0)
            ' Get the position of the last separator in the current path.
            posSep = aDirs(i).LastIndexOf("\")

            ' Get the path of the source directory.
            sDir = aDirs(i).Substring((posSep + 1), aDirs(i).Length -(posSep + 1))

            ' Create the new directory in the destination directory.
            System.IO.Directory.CreateDirectory(destDir + sDir)

            ' Since we are in recursive mode, copy the children also
            RecursiveCopyFiles(aDirs(i), (destDir + sDir), fRecursive)
        Next
    End If

    ' Get the files from the current parent.
    aFiles = System.IO.Directory.GetFiles(sourceDir)

    ' Copy all files.
    For i = 0 To aFiles.GetUpperBound(0)
        ' Get the position of the trailing separator.
        posSep = aFiles(i).LastIndexOf("\")

        ' Get the full path of the source file.
        sFile = aFiles(i).Substring((posSep + 1), aFiles(i).Length - (posSep+ 1))

        ' Copy the file.
        System.IO.File.Copy(aFiles(i), destDir + sFile)
    Next i
End Sub
...