How to copy/replace a file into a folder in VB.NET?

后端 未结 2 924
生来不讨喜
生来不讨喜 2021-01-14 02:13

I used File.Copy(source, target, True), where source is a full path name, like c:\\source.txt and target is a folder, whi

相关标签:
2条回答
  • 2021-01-14 02:18

    Target must contain a filename too:

    sSource = "C:\something.txt"
    sTarget = "C:\folder\something.txt"
    
    File.Copy(sSource, sTarget, True)
    

    If you want to programatically have the same filename just do:

    File.Copy(sSource, Path.Combine(sFolder, Path.GetFileName(sSource)), True)
    

    Read the MSDN Documentation to have examples and information about exceptions and use of the method.

    0 讨论(0)
  • You can also use a FileStream for reading and writing file contents. If you use a file stream you can read and write all types of binary files, not just text files.

    Use the following procedure:

    ''' <summary>
        ''' copies a file from one location to another
        ''' </summary>
        ''' <param name="inputPath">full path to the input file</param>
        ''' <param name="outputPath">full path to the output file</param>
        ''' <param name="bufferSize">the size in bytes as an integer that will be read and written at a time from input file and to the output file</param>
        ''' <param name="overwrite">overwrite the output file if it already exists</param>
        ''' <returns></returns>
        Public Function CopyFile(ByVal inputPath As String,
                                 ByVal outputPath As String,
                                 ByVal bufferSize As Integer,
                                 Optional ByVal overwrite As Boolean = False) As Boolean
    
            Dim PathIsClear As Boolean = True, SucOpt As Boolean = False
            Dim inputByteReaderObj As System.IO.FileStream = System.IO.File.Open(inputPath, IO.FileMode.Open) 'open a file stream for reading bytes from the input file
            Dim endofSize As Integer = My.Computer.FileSystem.GetFileInfo(inputPath).Length
            If overwrite AndAlso FileExists(outputPath) Then
                'if file exits, delete the output file
                PathIsClear = False
                PathIsClear = DeleteFilesOnDisk(outputPath) ' Delete the output file if it already exists
            End If
    
            ' Adjust array length for VB array declaration.
    
            Dim allBytesRead As Integer = 0, sucessfullBytes As Integer = 0, bytes As Byte() 'The byte array
            If bufferSize > endofSize Then
                bufferSize = endofSize
            End If
            If bufferSize >= 1 Then
                bytes = New Byte(bufferSize - 1) {} 'The byte array; create a byte array that will hold the data in length equal to the bufferSize; the array index starts at 0;
                If PathIsClear Then
                    While inputByteReaderObj.Read(bytes, 0, bufferSize) > 0
                        'read bytes consequtively from the input file, each time read bytes equal in length to bufferSize
                        Try
                            My.Computer.FileSystem.WriteAllBytes(outputPath, bytes, True) ' Append to the file contents
                            sucessfullBytes += bufferSize
                        Catch ex As Exception
                            Stop
                        End Try
                        allBytesRead += bufferSize
                        If (allBytesRead + bufferSize) > endofSize Then
                            bufferSize = endofSize - allBytesRead 'change the size of the buffer match the end of the file
                        End If
                        If bufferSize >= 1 Then
                            bytes = New Byte(bufferSize - 1) {} 'the array index starts at zero, the bufferSize starts at 1
                        End If
                        If allBytesRead >= endofSize Or bufferSize = 0 Then
                            'the reader has already reached the end of file, exit the reader loop
                            Exit While
                        End If
                    End While
                    If sucessfullBytes = allBytesRead Then
                        SucOpt = True
                    End If
                End If
            Else
                'write an empty file
                Try
                    System.IO.File.Create(outputPath) 'Create an empty file because the size of the input file is zero
                Catch ex As Exception
                    'an error occured in creating an empty file
                End Try
            End If
    
            inputByteReaderObj.Close()
    
            Return SucOpt
        End Function
    
    0 讨论(0)
提交回复
热议问题