2013-10-14 4 views
0

В настоящее время у меня есть одна функция для копирования некоторых файлов с сетевого диска и вставки их в папку локального сервера.Perl Opendir с логином?

sub getNetworkDrive { 
    #my $dir="\\\\network\\Path"; 
    my ($dir, $move_to) = @_; 

    opendir(DIR, $dir) or die "can't opendir $dir: $! \n"; 

    my @files=readdir(DIR); 
    closedir DIR; 

    foreach my $file (@files) 
    { 
     if (-f "$dir$file") 
     { 
      #my $move_to="C:\\Projects\\Perl\\download\\$file"; 
      my $move_from = "$dir$file"; 
      copy($move_from, $move_to) or die "Copy Failed: $!"; 
      print "File: $file : has been downloaded Successfully\n"; 
     } 
    } 
} 

Он отлично работает, когда я использую своего пользователя для выполнения сценария, поскольку мой пользователь имеет доступ к сетевому диску.

Я хочу, чтобы этот скрипт запрашивал авторизованное имя пользователя и пароль всякий раз, когда сценарий запускается.

Так что Opendir принимает имя пользователя и пароль в качестве параметра? если это не так, то в чем моя альтернатива?

+1

http://stackoverflow.com/questions/8972171/copy-file-to-a-network- доля-с различным именем пользователя и паролем, –

ответ

0

Благодаря mpapec

Я добавил новую функцию для этого и он работает сейчас

use Win32::NetResource qw/GetUNCName AddConnection CancelConnection/; 
use Win32API::File qw/ CopyFile fileLastError /; 
sub getNetworkDrive { 
    my ($share_name, $user_name, $password) = @_; 

    my $drive; 
    for my $letter ('g' .. 'z') { 
     my $mapped; 
     $drive = "$letter:"; 
     GetUNCName($mapped, $drive); 
     last if not $mapped; 
    } 

    my $share = { 
     RemoteName => $share_name, 
     LocalName => $drive, 
    }; 

    print "connecting $share->{RemoteName} to $share->{LocalName}\n"; 
    if(not AddConnection($share, $password, $user_name, 0)) { 
     die "connection error:\n", win32err(); 
    } 

    for my $file(@ARGV) { 
     print "copying $file\n"; 
     CopyFile($file, "$share->{LocalName}$file", 0) 
      or print "\tfailed: " . fileLastError() . "\n"; 
    } 

    getNetworkDriveWithoutLogin($share->{LocalName}, "C:\\Projects\\Perl\\download\\"); 

    if(not CancelConnection($share->{LocalName}, 0, 1)) { 
     print "disconnection error:\n", win32err(); 
    } 
}