Solved

Wait until file is copied

Posted on 2003-12-11
9
4,520 Views
Last Modified: 2010-05-18
I need to copy the file and then do something with it.

I am using
File.Copy(Source, Destiination)

If I strat doing something with the file while it is still in the process of being copied I am getting the exception that Access to the file denied.
Does  somebody have a solution how to make sure that the file has been successfully copied and Copying process is finished?

I was trying to check if the file size of the Destination is equal to the size of Source

Dim fi As FileInfo
Dim lLengthOfOld As Long

            'get the length of the file
            fi = New FileInfo(Source)
            lLengthOfOld = fi.Length

            File.Copy(Source, Destination)
Label1:
                Try
                    fi = New FileInfo(Destination)
                    'wait until copied
                    Do While Not fi.Length = lLengthOfOld
                       fi = New FileInfo(Destination)
                        Application.DoEvents()
                    Loop
                Catch
                    GoTo Label1
                End Try


But sometimes I still get the message that Access denied.
If I run code in Debug mode, execute 1 line at a time, everything works OK
0
Comment
Question by:iboutchkine
  • 4
  • 2
  • 2
  • +1
9 Comments
 
LVL 48

Expert Comment

by:Mikal613
ID: 9922252
use sleep

http://www.codeproject.com/useritems/The_UDP_under_VBNET.asp

depending on how big the file is

seconds of waiting
0
 
LVL 28

Author Comment

by:iboutchkine
ID: 9922309
I have already tried with sleep. It is working, but the problem is that it always takes different time to copy the file. It depends on the type of PC and how PC is busy with other processes. That is why it is not an option. The bottom line - I want to start synchronous process of copying a file and continue only after the copy is done. So far I cannot catch the end of the process. Even if I manage to compare bits written (like in the sample above) it does not mean that the file is closed.
0
 
LVL 48

Expert Comment

by:Mikal613
ID: 9922337
so do a Do while statement

While you get the error of access denied
0
Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

 
LVL 4

Assisted Solution

by:AdsB
AdsB earned 100 total points
ID: 9922405
Perhaps this problem goes away if you use an alternative to file.copy
Try copying the file under program control, by opeining it as a binary input file and copying it to an output file one buffer at a time.  It might take a little longer that way but not very much longer because the bottleneck is still really the disk speed not the extra CPU cycles needed to runb your code.  The real difference is that you will be in control of the process and will know exactly when it has finished.

I can give you sample code for this if you need it.

AdsB
0
 
LVL 28

Author Comment

by:iboutchkine
ID: 9922460
Mikal613
After copying the file I start external program which generates an error - Access denied. My program runs on the background (without user presence). That is why I cannot afford to have messages to appear on my screen

 AdsB
Can you please give me a code

0
 
LVL 22

Accepted Solution

by:
_TAD_ earned 150 total points
ID: 9922518


This will copy a file very fast

I think it is similar to what ADSb suggested


                  BinaryReader br = new BinaryReader(new FileStream(@"C:\temp\test.txt",FileMode.Open));
                  BinaryWriter bw = new BinaryWriter(new FileStream(@"C:\test.txt",FileMode.Create));
                  bw.Write(br.ReadBytes((int)br.BaseStream.Length));
                  bw.BaseStream.Flush();
                  br.BaseStream.Close();
                  bw.BaseStream.Close();
0
 
LVL 22

Expert Comment

by:_TAD_
ID: 9922535


The only down side to the code provided is that your file must be less than 2.1 Gig in size, which woulnd't work if you are creating a back up program of some sort.


0
 
LVL 28

Author Comment

by:iboutchkine
ID: 9922599
Thank you _TAD_ I will try and get back to you.
0
 
LVL 28

Author Comment

by:iboutchkine
ID: 9922872
Thank you _TAD_ and AdsB. I got it to work. Her eis the code for whoever is interested

 Dim i As Integer
        Dim sFile As String
        Dim arrFiles() As String
        Dim posSep As Integer
        Dim br As BinaryReader
        Dim bw As BinaryWriter


        arrFiles = GetFiles(sDir) 'from MailBox directory

        For i = 0 To arrFiles.GetUpperBound(0)
            posSep = arrFiles(i).LastIndexOf("\")
            ' Get the file name from the full path
            sFile = arrFiles(i).Substring((posSep + 1), arrFiles(i).Length - (posSep + 1))

            If sFile.Substring(0, 3) = "ib_" Then
                br = New BinaryReader(New FileStream(sDir & sFile, FileMode.Open))
                bw = New BinaryWriter(New FileStream(OUT & sFile, FileMode.Create))
                bw.Write(br.ReadBytes(CInt(br.BaseStream.Length)))
                bw.BaseStream.Flush()
                br.BaseStream.Close()
                bw.BaseStream.Close()
            End If
        Next i
0

Featured Post

MIM Survival Guide for Service Desk Managers

Major incidents can send mastered service desk processes into disorder. Systems and tools produce the data needed to resolve these incidents, but your challenge is getting that information to the right people fast. Check out the Survival Guide and begin bringing order to chaos.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

IP addresses can be stored in a database in any of several ways.  These ways may vary based on the volume of the data.  I was dealing with quite a large amount of data for user authentication purpose, and needed a way to minimize the storage.   …
This document covers how to connect to SQL Server and browse its contents.  It is meant for those new to Visual Studio and/or working with Microsoft SQL Server.  It is not a guide to building SQL Server database connections in your code.  This is mo…
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…

821 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question