Solved

Wait until file is copied

Posted on 2003-12-11
9
4,514 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
Comment Utility
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
Comment Utility
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
Comment Utility
so do a Do while statement

While you get the error of access denied
0
 
LVL 4

Assisted Solution

by:AdsB
AdsB earned 100 total points
Comment Utility
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
Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

 
LVL 28

Author Comment

by:iboutchkine
Comment Utility
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
Comment Utility


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_
Comment Utility


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
Comment Utility
Thank you _TAD_ I will try and get back to you.
0
 
LVL 28

Author Comment

by:iboutchkine
Comment Utility
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

How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
Linux operating system 12 64
Problem to go to Web page 2 46
Why don't I see this table in EDMX file? 2 19
XML & .net 5 16
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.   …
Welcome my friends to the second instalment and follow-up to our Minify and Concatenate Your Scripts and Stylesheets (http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/A_4334-Minify-and-Concatenate-Your-Scripts-and-Stylesheets.html)…
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

772 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

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now