qadwjoh has asked for the wisdom of the Perl Monks concerning the following question:

Hi,

I'm writing a script to transfer files using XCOM and then encrypt them. My problem is deciding when a file has been fully transferred so that I can execute the command to encrypt it.

Is there any way to check in Perl that a file is complete or still in use?

thanks,
A

Replies are listed 'Best First'.
Re: Checking for finished file transfer
by bfish (Novice) on Aug 14, 2003 at 16:29 UTC

    Take a look at Win32::ChangeNotify. Sorry that isn't a link, but I'm not sure where it is on CPAN (I was using the ActiveStates doc). There is a filter you can set so that you are notified on a change in file size. You can sleep for a short interval between checks on the file you want to monitor. Then, when you timeout on your wait, do your encryption.

Re: Checking for finished file transfer
by BrowserUk (Patriarch) on Aug 14, 2003 at 15:49 UTC

    A little more information would help.

    What OS are you running under?

    How are you invoking XCOM to do the transfer? Are you intending doing this from within your script?


    Examine what is said, not who speaks.
    "Efficiency is intelligent laziness." -David Dunham
    "When I'm working on a problem, I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong." -Richard Buckminster Fuller
    If I understand your problem, I can solve it! Of course, the same can be said for you.

      I'm using Windows 2000 Server and yeah, I'm invoking the XCOM command from within my script to fetch files before encrypting them.

      thanks
      A

        If the command your invoking returns before the transfer is complete, then your into doing hooky stuff like looping and checking the filesize (-s) to see if it is still growing.

        The other possibility is that the process (XCOM service?) that is doing the transfer may open the file with an exclusive open, in which case loop and sleep until you can successfully open it.


        Examine what is said, not who speaks.
        "Efficiency is intelligent laziness." -David Dunham
        "When I'm working on a problem, I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong." -Richard Buckminster Fuller
        If I understand your problem, I can solve it! Of course, the same can be said for you.

Re: Checking for finished file transfer
by fglock (Vicar) on Aug 14, 2003 at 18:24 UTC

    Some download managers set the file size well before they are finished.

    You can make your download process rename the file when it completes.
    Then, all you have to do is to monitor the filenames.

Re: Checking for finished file transfer
by markguy (Scribe) on Aug 14, 2003 at 16:56 UTC
    Do I understand correctly that you have control over both ends of the transfer? If so... and keeping in mind I don't have the foggiest clue what XCOM is if not a really cool turn-based, alien-hunting, squad level combat game... shouldn't just comparing the size of the files net you the desired result?

    As the above suggestions point out, sleep'g would be involved, but I don't see the need for module use if you have known file sizes.