Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check when Shell32.Folder.CopyHere() is finished

I need to unzip en zip some files in my application using Shell32. Right now, I use srcFolder.CopyHere(destFolder.Items()) to achieve this. However, my next line of code requires the newly made ZIP-file. But since the CopyHere method is Async, how can I check when it in finished? Right now I use a Thread.Sleep for around 500 ms which is enough for my computer to finish creating the ZIP file, but it's not good code imo.

Any ideas?

More info/code can be provided if necessary.

like image 612
Jelle Capenberghs Avatar asked Apr 06 '12 11:04

Jelle Capenberghs


2 Answers

Here is another one for waiting to finish copying

'Wait until the File/Folder has finished writing to zip file...
Do Until Shell.NameSpace(Filename).Items.Count = Shell.NameSpace(Input).Items.Count
    System.Threading.Thread.Sleep(200)
    System.Diagnostics.Debug.Print("Waiting...")
Loop
like image 104
Fid Avatar answered Oct 21 '22 20:10

Fid


I found it, used something like this:

  srcFolder.CopyHere(destFolder.Items())


            While FileInUse(FILEPATH & "BudgetJaarOverzichtSMB.zip")
                Thread.Sleep(100)
            End While

    Private Function FileInUse(ByVal FilePath As String) As Boolean
        Try
            FileOpen(1, FilePath, OpenMode.Input)
            FileClose(1)
            Return False    ' File not in use
        Catch ex As Exception
            Return True     ' File in use
        End Try
    End Function

Not really perfect but will lose less time than with my first approach.

like image 35
Jelle Capenberghs Avatar answered Oct 21 '22 21:10

Jelle Capenberghs