[2 days left] What’s wrong with your cloud strategy? Learn why multicloud solutions matter with Nimble Storage.Register Now

x
?
Solved

Wait until file is copied

Posted on 2003-12-11
9
Medium Priority
?
4,525 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Nothing ever in the clear!

This technical paper will help you implement VMware’s VM encryption as well as implement Veeam encryption which together will achieve the nothing ever in the clear goal. If a bad guy steals VMs, backups or traffic they get nothing.

 
LVL 4

Assisted Solution

by:AdsB
AdsB earned 400 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 600 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

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

Question has a verified solution.

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

This article describes relatively difficult and non-obvious issues that are likely to arise when creating COM class in Visual Studio and deploying it by professional MSI-authoring tools. It is assumed that the reader is already familiar with the cla…
Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
Video by: ITPro.TV
In this episode Don builds upon the troubleshooting techniques by demonstrating how to properly monitor a vSphere deployment to detect problems before they occur. He begins the show using tools found within the vSphere suite as ends the show demonst…
Are you ready to place your question in front of subject-matter experts for more timely responses? With the release of Priority Question, Premium Members, Team Accounts and Qualified Experts can now identify the emergent level of their issue, signal…

656 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