• 0

[VB.NET]Copy File with progress bar


Question

I'm attempting to make a program that will copy files reclusively in VB.NET.

basically I have a function that calculates the total size of every file in the directory and sub directories then goes through all of them and calls the CopyFile function.

this works alright in that my progress bar actually updates while the file is being copied instead of using filenames like I had been. It just seams to be going a lot slower. Five seconds for a 156k file as opposed to bellow three.

Is there a better way?

Clint

        Private Function CopyFile(ByVal OldFile As String, ByVal NewFile As String)
            Me.FileProgressbar.Value = 0
            Dim FS As New FileStream(OldFile, FileMode.Open)
            Dim FW As New FileStream(NewFile, FileMode.CreateNew)
            Dim Buffer() As Byte
            'Get the bytes from file to a byte array
            ReDim Buffer(FS.Length - 1)
            Me.FileProgressbar.Maximum = FS.Length
            FS.Read(Buffer, 0, Buffer.Length)
            'Do your stuff :-)
            For i As Int32 = 0 To Buffer.Length - 1
                Me.FileProgressbar.Value += 1
                FW.WriteByte(Buffer(i))
                Me.TotalProgressbar.Value += 1
            Next
            FS.Close()
            FW.Close()
        End Function

Link to comment
https://www.neowin.net/forum/topic/341607-vbnetcopy-file-with-progress-bar/
Share on other sites

11 answers to this question

Recommended Posts

  • 0

I'm already using basic multi threading.

Per another board I changed it to write and update the progressbars every kb and that helped a lot.

It copied a 75.5 Meg file 1.53125 Seconds faster then File.Copy :)

I will try and get this "Proper Threading" thing figured out in the morning after I've had some rest. :p

Clint

  • 0

Yes I was, now it copies each Kb

My Code with a single progressbar took 42.374 seconds to copy a 483,005 kb file, File.Copy took 46.343 seconds

two progressbars:

My Code: 68.28 Seconds

File.Copy: 37.343 Seconds

No Progressbars:

Mine: 23.796 Seconds

.NET: 41.499 Seconds

that last one surprised me.

figured that at best mine would be just as fast as File.Copy, but apparently not...

Clint

  • 0
  GoodOlClint said:
Yes I was, now it copies each Kb

My Code with a single progressbar took 42.374 seconds to copy a 483,005 kb file, File.Copy took 46.343 seconds

two progressbars:

My Code: 68.28 Seconds

File.Copy: 37.343 Seconds

No Progressbars:

Mine: 23.796 Seconds

.NET: 41.499 Seconds

that last one surprised me.

figured that at best mine would be just as fast as File.Copy, but apparently not...

Clint

586183376[/snapback]

You seems calculating the time taken by using codes WHICH slows the copying process, if so then you should remove this codes and see the difference ;)

  • 0
  Elagizy said:
You seems calculating the time taken by using codes WHICH slows the copying process, if so then you should remove this codes and see the difference  ;)

no I used this to get how long it took:

Sub debug()
        Dim copy As New clsCopyFiles(Me.ProgressBar2, Me.ProgressBar1, Me.Label8, Me.Label7)
        Dim start1 As Date = Now
        copy.CopyFile("C:\largefile.wmv", "C:\video1.wmv")
        Dim finish1 As Date = Now
        Dim start2 As Date = Now
        File.Copy("C:\largefile.wmv:\video2.wmv")
        Dim finish2 As Date = Now
        MsgBox(finish1.TimeOfDay.TotalSeconds - start1.TimeOfDay.TotalSeconds & vbNewLine & finish2.TimeOfDay.TotalSeconds - start2.TimeOfDay.TotalSeconds)
    End Sub

so I wasn't calculating untill after the copying was done.

Clint

  • 0
  GoodOlClint said:
no I used this to get how long it took:

Sub debug()
        Dim copy As New clsCopyFiles(Me.ProgressBar2, Me.ProgressBar1, Me.Label8, Me.Label7)
        Dim start1 As Date = Now
        copy.CopyFile("C:\largefile.wmv", "C:\video1.wmv")
        Dim finish1 As Date = Now
        Dim start2 As Date = Now
        File.Copy("C:\largefile.wmv:\video2.wmv")
        Dim finish2 As Date = Now
        MsgBox(finish1.TimeOfDay.TotalSeconds - start1.TimeOfDay.TotalSeconds & vbNewLine & finish2.TimeOfDay.TotalSeconds - start2.TimeOfDay.TotalSeconds)
    End Sub

so I wasn't calculating untill after the copying was done.

Clint

586183620[/snapback]

The problem with your method, though, is that you can only transfer files that can fit in memory. Unless you are now implementing a buffer that outputs every megabyte or so.

  • 0

It's strange that you're like trying to reinvent the wheel, i mean yeah the base class library offers a static file copy method for you to use, why try to do it all over again, and furthermore, i'm sure their implementation of file copy is much more efficient.

  • 0
  Winston said:
It's strange that you're like trying to reinvent the wheel, i mean yeah the base class library offers a static file copy method for you to use, why try to do it all over again, and furthermore, i'm sure their implementation of file copy is much more efficient.

586185592[/snapback]

hehe I'm one of those people who can't stand knowing things work. I have to know why it works.

I learn best by reinventing the wheel. :-p

Besides, I'm in highschool, I can do anything right :shifty: ?

Clint

  • 0
  GoodOlClint said:
hehe I'm one of those people who can't stand knowing things work. I have to know why it works.

I learn best by reinventing the wheel. :-p

Besides, I'm in highschool, I can do anything right :shifty: ?

Clint

586185657[/snapback]

Yeah i guess it's good to understand how things work. But i think that's how you'd do it in general, however, i think the file.copy in which the framework provides, invokes a Win32 API, and i'm pretty sure MS does the file copy a little different, peraps more efficient, since they made the OS after all.

  • 0
  Winston said:
Yeah i guess it's good to understand how things work. But i think that's how you'd do it in general, however, i think the file.copy in which the framework provides, invokes a Win32 API, and i'm pretty sure MS does the file copy a little different, peraps more efficient, since they made the OS after all.

586186072[/snapback]

Oh I have no doubt that it is extremly more efficient. after all, they are a mega corp with billions to spend and I'm a 17 year old with $5 in my pocket...

Clint

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Calibre 8.5 by Razvan Serea  Calibre is an open source e-book library management application that enables you to manage your e-book collection, convert e-books between different formats, synchronize with popular e-book reader devices, and read your e-books with the included viewer. It acts as an e-library and also allows for format conversion, news feeds to e-book conversion, as well as e-book reader sync features and an integrated e-book viewer. Calibre's features include: library management; format conversion (all major ebook formats); syncing to e-book reader devices; fetching news from the Web and converting it into ebook form; viewing many different e-book formats, giving you access to your book collection over the internet using just a browser. Calibre 8.5 changelog: New features The scrollbars used in calibre in light mode are now the same style as the ones in dark mode, this improves the contrast making the scrollbar more accessible Kobo driver: add an option to change the how the Kobo displays series numbers using a template. Manage data files dialog: Add a button to cancel remaining books when managing multiple books Kobo driver: add support for new Tolino firmware Bug fixes Prevent Windows 11 from starting a conhost.exe process for every calibre worker process E-book viewer: Improve highlight grouping with recurring chapter names When sending emails to amazon and pocketbook use random English text instead of UUIDs for subject/body. Improved news sources NYTimes WSJ Financial Times Eenadu Fokus.se Business standard Go comics NZ Herald TLS Magazine Download: Calibre 8.5 | Portable | ~200.0 MB (Open Source) Download: Calibre for MacOS | 316.0 MB Download: Calibre for Linux View: Calibre Home Page | Calibre Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • Or, it is Apple simply overinflated the screens.
    • Is it that easy though? WhatsApp is the default way the majority message in a lot of countries these days. I would prefer Signal to be as popular as WhatsApp and probably could get a few people to use it, most people are probably going to stick with WhatsApp sadly. Which leaves SMS or Facebook Messenger as alternatives a lot of people also have. (Here anyway, I know iMessage, LINE and WeChat dominate in certain parts of the world). It annoying Meta purchased WhatsApp all those years ago.
    • Do they tell Google not to scrape their content via something like robots.txt? Do they specify anywhere that certain agents aren't to scrape? If not, tough. Plus there's no obligation on anyone's part to adhere to any directives that might be in this file anyway...
    • DMDE 4.3.5.823 Beta by Razvan Serea DMDE is a software designed to effectively recover lost data. It retrieves files and folders swiftly and stores them in the user-defined location. It is an easy to use yet powerful tool that will assist both novice and experienced users in getting back lost files in just a few simple steps. Free Edition includes all basic features but a single recovery operation recovers up to 4000 files in the current panel only (you should first open a subdirectory in the current panel and then recover files in the panel). In paid licenses there is no this restriction, and recovery of nested directories is allowed. Can paid versions recover more files than the free version of DMDE? If a file cannot be recovered in the DMDE Free Edition (or it is damaged after recovery) the same will occur in the paid versions. DMDE paid versions are capable of recovering the same files. The only difference is that paid versions can recover all found files in one go, as well as restore the directory structure presented in the free version. Professional Edition provides additional features: rights to provide data recovery services portable use on different computers one-time activation on client computers (including remote use) data recovery reports (include logs and file checksums) read support for E01 disk image files using logs when copying a disk (resume copying, multiple passes) customizable I/O handler script recovery of NTFS alternate data streams DMA access in DOS (for ATA interface) DMDE key features: Portable run without installation Support for NTFS, FAT12/16, FAT32, exFAT, ReFS, Ext2/Ext3/Ext4, btrfs, HFS+/HFSX, APFS Thorough FS and Raw scan, FS reconstruction for data recovery in complex cases Simple partition manager for express search, diagnostics, and restoration of partitions Disk cloning and disk image creating, including I/O error handling, reverse copying, and other features RAID constructor for virtual RAID reconstruction supporting levels RAID-0, RAID-1, RAID-4, RAID-5, RAID-6, delayed parity, custom striping, JBOD/spanned disks; automatic calculation of RAID configurations Cluster map to investigate file allocation Disk editor compatible with the most recent Windows versions which allows viewing, editing, and navigating through different disk structures using built-in and custom templates NTFS tools to work bypassing NTFS driver (copy, delete file, create, repair directory) Support for various device I/O interfaces and settings to work with damaged devices, disk images, NTFS compression and encryption, national names, large disks, large files, large sectors, and other features DMDE 4.3.5.823 Beta changelog: Expanded built-in signatures for RAW search functionality Added file list export to HTML format (DMDE Professional Edition only, view sample) Improved handling of I/O errors with selective skipping by error code Enabled preview support for additional image (graphic) file types (Windows only) Improved extfs reconstruction when copies of superblocks with group descriptors are found Fixed potential hang during Btrfs volume reconstruction Resolved issue with cluster list creation when subfolders are present Other improvements and fixes Download: DMDE 64-bit | 2.4 MB (Free, paid upgrade available) Download: DMDE 32-bit | 2.0 MB Link: DMDE Home Page | DMDE Manual | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
  • Recent Achievements

    • Week One Done
      Crunchy6 earned a badge
      Week One Done
    • One Month Later
      KynanSEIT earned a badge
      One Month Later
    • One Month Later
      gowtham07 earned a badge
      One Month Later
    • Collaborator
      lethalman went up a rank
      Collaborator
    • Week One Done
      Wayne Robinson earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      676
    2. 2
      ATLien_0
      276
    3. 3
      Michael Scrip
      221
    4. 4
      +FloatingFatMan
      169
    5. 5
      Steven P.
      162
  • Tell a friend

    Love Neowin? Tell a friend!