Newsgroup: it.comp.lang.perl
Titolo: problema con la funzione rename....

Ciao a tutti,
il mio problema è legato allo spostamento di un file dopo la lettura e la
relativa chiusura, il sistema operativo (Windows XP) mi dice che non ho i
permessi per spostare il file (Permission denied). Di seguito riporto un
pezzo dello script.....
while(true){
if(!opendir(DS,$statistics_dir)){
   $log->writeLog(ERROR,"unable to open statistics dir [$statistics_dir]");
   print "unable to open dir [$statistics_dir]\n";
}else{
  @elenco1= grep /bdf/, readdir(DS);
  closedir (DS);
}
if(!opendir(DA,$accounting_dir)){
   $log->writeLog(ERROR,"unable to open accountig dir [$accounting_dir]");
   print "unable to open dir [$accounting_dir]\n";
}else{
  @elenco2= grep /bdf/, readdir(DA);
  closedir (DA);
}
$fileAn = $ARGV[1];
loadInfo($fileAn);
@elenco = (@elenco1, @elenco2);
foreach $f1 (@elenco){
  if ($f1 =~ /sta/){
   $f = $statistics_dir . "\\" . $f1;
  }elsif($f1 =~ /acc/){
   $f = $accounting_dir . "\\" . $f1;
  }
  $date = localtime();
  $log->writeLog(INFO,"date: $date");
  $log->writeLog(INFO,"parsing file: [$f]");
   if (!open(F, "$f")) {
        $log->writeLog(FATAL,"Non posso aprire [$f]");
        die "Non posso aprire [$f]\n";
   }
   while (<F>){
     next if (/^$/ || /^#/);
     if (/LogicalProcessor/){
       $str =
parseLine($_,\%logicalProcessorCheck,\%logicalProcessorCallback,
                        $logicalProcessorSeparator,@logicalProcessorFields);
       push(@LP, $str) if ($str ne "");
     }
     elsif (/Trunk.*AtmAccess/){
       $str = parseLine($_,\%trkInterfaceCheck,\%trkInterfaceCallback,
                        $trkInterfaceSeparator,@trkInterfaceFields);
       push(@TA, $str) if ($str ne "");
     }
     elsif (/AtmInterface/){
       $str = parseLine($_,\%atmInterfaceCheck,\%atmInterfaceCallback,
                        $atmInterfaceSeparator,@atmInterfaceFields);
       push(@AI, $str) if ($str ne "");
     }
     elsif (/DpnGateway/ && !/Utp/){
       $str = parseLine($_,\%DpnGatewayCheck,\%DpnGatewayCallback,
                        $DpnGatewaySeparator,@DpnGatewayFields);
       push(@DG, $str) if ($str ne "");
     }
     elsif (/DpnGateway.*Utp/){
       $str = parseLine($_,\%DpnUtpCheck,\%DpnUtpCallback,
                       $DpnUtpSeparator,@DpnUtpFields);
       push(@DU, $str) if ($str ne "");
     }
     elsif (/UnAcked/){
       $str = parseLine($_,\%UnAckedCheck,\%UnAckedCallback,
                       $UnAckedSeparator,@UnAckedFields);
       push(@UA, $str) if ($str ne "");
     }
     if ($f =~ /acc/)
     {
       $str = parseLine($_,\%vccInterfaceCheck,\%vccInterfaceCallback,
                        $vccInterfaceSeparator,@vccInterfaceFields);
       if ($str ne "") {
          push(@VC, $str);
       }
       else {
        $str = parseLine($_,\%vpcInterfaceCheck,\%vpcInterfaceCallback,
                         $vpcInterfaceSeparator,@vpcInterfaceFields);
        push(@VP, $str) if ($str ne "");
       }
     }
  }
  close (F);
  if ($f =~ /sta/){
   #$move = `mv $f $statistics_done`;
   $ret = rename ($f, $statistics_done);
   print "rename: [$ret] [$!] \n";
  }elsif($f =~ /acc/){
   #$move = `mv $f $accounting_done`;
   rename $f, $accounting_done;
  }
Qualcuno mi può dare delle indicazioni..... grazie.
Abanero.

Qualcuno mi può dare delle indicazioni..... grazie.
Scusa, ma, invece di postare decine di righe di codice che nessuno si
metterà mai a leggere, non facciamo prima se ci dici se li hai o no questi
benedetti permessi?
E se per caso il problema fosse proprio il codice e non i permessi, facci
il favore di individuare la parte di codice che determina il problema,
invece di costringerci a leggere "Guerra e pace". Che, tra l'altro, nessuno
ha le "basi culturali" per capire, dipendendo in larghissima misura dal tuo
sistema.
E, tanto per curiosità, dov'è che assegni un valore qualunque a
$statistics_done e $accounting_done?
Ciao.

 ha scritto nel messaggio
news:9hdbvu03ji8kvvia4...@4ax.com...


administrator, e i file hanno come permesso soltanto la a (archive).
E la directory di destinazione, che permessi ha? E poi, che cosa contano i
soli permessi dei file in Windows? Dovrai guardare la lista di accesso
(puoi benissimo essere administrator e non avere permesso di scrivere in
una directory). E la destinazione è sullo stesso file system o disco? E sei
sicuro che non esistano già file con quel nome? E il nome è corretto?
Fintanto che non si sa che cosa c'è in $statistics_done e $accounting_done,
è difficile capirci qualcosa. Ti consiglio di fartelo stampare, prima
dell'istruzione di rename. Magari fra delimitatori, per capire se ci sono
spazi iniziali o finali: print "[",$accounting_done,"]";
Ciao.

 ha scritto nel messaggio
news:4igbvukabbkrkk132...@4ax.com...

Ok. Ho risolto, utilizzavo male la funzione rename. Comunque grazie.

 riporto un pezzo dello script.....
Curiosita': sui sistemi Unix rename non funziona tra file systems 
differenti, su Win32 come si comporta?
-- 
Saluti,
Giancarlo