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

All I want to do is copy a file from one directory to different directory.
use strict; use warnings; use diagnostics; use File::Copy; use Net::FTP; use Sys::Hostname; my $hostname = hostname(); my $file = '00000001.txt'; my $fileB = '00000001.txt'; my $host = $hostname; my $user = '*******'; my $pass = ********'; my $dir = '/doytest/cgi-bin/Data/'; my $ftp = Net::FTP->new($host, Debug => 1); $ftp->login($user,$pass); $ftp->cwd($dir); $ftp->get("$file","/doytest/cgi-bin/Data/Temp/$fileB"); $ftp->quit;
I want to put /doytest/cgi-bin/Data/00000001.txt into /doytest/cgi-bin/Data/Temp/00000001.txt. No success so far. Thanks in advance

Replies are listed 'Best First'.
Re: copying a file
by aukjan (Friar) on May 20, 2005 at 12:32 UTC
    why do you want to copy a local file by using ftp?
    And I assume you noticed that your are missing a '/' in
    $ftp->get("$file","/doytest/cgi-bin/Data/Temp$fileB"); should be: $ftp->get("$file","/doytest/cgi-bin/Data/Temp/$fileB");
    .:| If it can't be fixed .. Don't break it |:.
Re: copying a file
by Joost (Canon) on May 20, 2005 at 12:32 UTC
Re: copying a file
by monkey_boy (Priest) on May 20, 2005 at 12:32 UTC
    Should this
    $ftp->get("$file","/doytest/cgi-bin/Data/Temp$fileB");

    be changed to :
    $ftp->get("$file","/doytest/cgi-bin/Data/Temp/$fileB");


    This is not a Signature...
Re: copying a file
by mrborisguy (Hermit) on May 20, 2005 at 12:38 UTC

    Is there a reason you are trying to do this with FTP? You are using File::Copy, so why not just use copy( $dir.$file, $dir."Temp/".$file )? (You would have to change $dir to be relative to your root then, something like "/home/doytest/cgi-bin/Data" or however you have your system set up.

    If you are intent on doing it with FTP, then we'll have to figure something else out.

    -Bryan

      Correction was made on the path and thanks for pointing that out. The file I want to copy is on an ftp server(/doytest/cgi-bin/00000001.txt) and I would like to copy this file to my pc(C:/Temp). This is want I am trying to do. If there is any other way, I am all ears.
Re: copying a file
by Anonymous Monk on May 20, 2005 at 12:49 UTC
    No success so far.
    Have you tried the Debug option? Why not?
      This is the output I get when I run the script:
      Net::FTP=GLOB(0x1832724)<<< 220 Serv-U FTP Server v6.0 for WinSock rea +dy... Net::FTP=GLOB(0x1832724)>>> user ******* Net::FTP=GLOB(0x1832724)<<< 331 User name okay, need password. Net::FTP=GLOB(0x1832724)>>> PASS .... Net::FTP=GLOB(0x1832724)<<< 230 User logged in, proceed. Net::FTP=GLOB(0x1832724)>>> PORT ***,190,**,17,4,*** Net::FTP=GLOB(0x1832724)<<< 200 PORT Command successful. Net::FTP=GLOB(0x1832724)>>> RETR /doytest/cgi-bin/00000001.610 Net::FTP=GLOB(0x1832724)<<< 150 Opening ASCII mode data connection for + 00000001.610 (6317 Bytes). Cannot open Local file /doytest/cgi-bin/00000001.610: No such file or +directory Net::FTP=GLOB(0x1832724)>>> ňABOR Net::FTP=GLOB(0x1832724)<<< 226-Maximum disk quota limited to 51200 kB +ytes Net::FTP=GLOB(0x1832724)<<< Used disk quota 712 kBytes, available +50487 kBytes Net::FTP=GLOB(0x1832724)<<< 226 Transfer complete. Net::FTP=GLOB(0x1832724)<<< 226 ABOR command successful. Net::FTP=GLOB(0x1832724)>>> QUIT Net::FTP=GLOB(0x1832724)<<< 221 Goodbye!

        Observation: Your file in the debug is "00000001.610", not "00000001.txt".

        Observation: Your host variable contains a the value from a call to 'hostname()'. It looks like this function returns the hostname of the machine the script is being called on. That wouldn't be the machine you want to get your file from, right? You want it from a different server machine.

        -Bryan

        Cannot open Local file /doytest/cgi-bin/00000001.610: No such file or directory
        What do you think that means?
        You stated that you wanted to copy it to c:\ But you do a:
        $ftp->get("$file","/doytest/cgi-bin/Data/Temp/$fileB");
        which give you an error, that it can't find the local file:
        Cannot open Local file /doytest/cgi-bin/00000001.610: No such file or +directory
        So I assume you will have to change the second argument in the get to
        $ftp->get("$file","c:/Temp/$fileB");

        .:| If it can't be fixed .. Don't break it |:.