Imports System.IO ''' <summary> ''' Copy a file from the source to the target location, and shows a progressbar to the user ''' ''' Call: ''' ''' CopyFileWithBar.DoCopy("c:\somesource.bin","c:\sometarget.bin") ''' ''' Returns FALSE if the source file does not exists ''' Returns TRUE if the copy succeeded ''' You need to trap exceptions for e.g. non writable target files in the wrapping code using this class. ''' ''' H.P. Noordam (b.noordam@nhcoding.nl) ''' ''' </summary> ''' <remarks></remarks> Public Class CopyFileWithBar Public Shared Function DoCopy(ByVal sSourcefile As String, _ ByVal sTargetfile As String) As Boolean If File.Exists(sSourcefile) = False Then Return False ' --- Create a form to show the progress of the copy action Dim fStatus As New Form fStatus.Width = 640 fStatus.Height = 60 fStatus.StartPosition = FormStartPosition.CenterScreen fStatus.FormBorderStyle = FormBorderStyle.FixedSingle fStatus.TopMost = True ' // ' --- Create a new progressbar, and place the control on the form Dim oProgressbar As New ProgressBar oProgressbar.Width = 600 oProgressbar.Height = 30 oProgressbar.Minimum = 0 oProgressbar.Maximum = 100 oProgressbar.Location = New Point(10, 5) ' // ' --- Place the progressbar on the form, and display the progress box ' (on windows 7 the progressbar tends to lack behind on smaller files ' this is a side effect caused by the control, not by the code. If you ' realy want to address the issue you need to seriously slow down the ' copy by implemting something like System.Threading.Thread.Sleep(50) ' in the main loop) fStatus.Controls.Add(oProgressbar) fStatus.Show() ' // ' Copy the file Using oInfile As New FileStream(sSourcefile, FileMode.Open, FileAccess.Read) Using oOutfile As New FileStream(sTargetfile, FileMode.Create, FileAccess.Write) Dim oReader As New BinaryReader(oInfile) Dim oWriter As New BinaryWriter(oOutfile) Dim nFilesize As Int64 = oReader.BaseStream.Length Dim nProgress As Integer Dim bByte(32768) As Byte Dim nCount As Int64 Dim vExit As Boolean = False While vExit = False bByte = oReader.ReadBytes(32768) oWriter.Write(bByte) Dim nReadbytes As Integer = bByte.Count nCount = nCount + nReadbytes ' --- Update display If nCount <> 0 Then nProgress = CInt((nCount / (nFilesize) * 100)) oProgressbar.Value = nProgress fStatus.Text = String.Format("{0}%", nProgress) Application.DoEvents() End If ' // If nReadbytes = 0 Then vExit = True End If End While oReader.Close() oWriter.Close() End Using End Using ' // fStatus.Close() Return True End Function End Cla