Che modulo (s) Perl faccio a utilizzare per ottenere un percorso assoluto (compreso il nome del file) da un parente uno su Windows?

StackOverflow https://stackoverflow.com/questions/1527638

Domanda

Posso solo immaginare che non sto cercando correttamente; questa sembra una domanda ovvia da porsi. Le mie scuse se questo è un duplicato.

Sto scrivendo un programma Perl che avrà un nome di file come argomento della riga di comando. Ho bisogno di convertire il nome del file (o il nome del file con un percorso relativo allegato) ad un percorso assoluto (appositamente per funzionare con Win32 :: OLE).

Ho provato ad utilizzare Cwd 's 'abs_path', e che fa quasi quello che voglio, ma restituisce utilizzando un percorso in stile Unix invece di un Win32.

C'è un modulo che permette di convertire il percorso, o forse un modulo meglio usare in primo luogo?

È stato utile?

Soluzione

Io uso rel2abs da File :: Spec . Bisogna stare attenti però: che potrebbero chiamare getdcwd da Cwd, e si assumerà che si desidera che la directory di lavoro corrente per l'unità corrente. Se il file è in qualche altra unità, si dovrà rimediare da soli o fornire il secondo argomento per impostare il percorso di base.

Altri suggerimenti

use File::Spec::Functions qw(rel2abs);
print rel2abs($ARGV[0]), "\n";
my($foo) = abs_path($some_file);
$foo =~ s{/}{\\}g;

print "FOO: $foo\n";

Io uso abs_path di Cwd e quindi utilizzare una regex per convertire le barre quando I davvero bisogno fatto. Ma ho scoperto che per la maggior parte degli usi, barre in stile Unix funzionano bene. E 'solo per l'occasionale "passare un nome di file per quel programma fastidiosamente limitata" che finisco bisogno per convertire le barre.

use Cwd 'abs_path';
my $path = abs_path($rel_path);

# and only if necessary...
$path =~ s'[/\\]+'\\'g;  # use Windows-style slashes
$path =~ s'^\\'\\\\';    # handle network path

Ma poi .. io uso un sacco di percorsi di rete, con o senza un riferimento un'unità mappata. La vostra situazione potrebbe essere diversa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top