Qu'est-ce que le module Perl (s) dois-je utiliser pour obtenir un chemin absolu (nom de fichier, y compris) d'un rapport sur Windows?

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

Question

Je ne peux imaginer que je ne suis pas la recherche correctement; cela semble être une question évidente à poser ici. Je présente mes excuses si cela est un doublon.

J'écris un programme Perl qui prendra un nom de fichier comme argument de ligne de commande. Je dois convertir le nom du fichier (ou le nom du fichier avec un chemin relatif attaché) à un chemin absolu (spécifiquement pour fonctionner avec Win32 OLE).

J'ai essayé d'utiliser Cwd abs_path « 'l », et qui fait presque ce que je veux, mais il retourne à l'aide d'un chemin de style Unix au lieu d'un Win32.

Y at-il un module qui permet de convertir le chemin, ou peut-être un meilleur module pour utiliser en premier lieu?

Était-ce utile?

La solution

J'utilise rel2abs de File :: Spec . Il faut faire attention cependant: que pourrait appeler getdcwd de Cwd, et il suppose que vous voulez que le répertoire de travail en cours pour le lecteur en cours. Si le fichier est sur un autre lecteur, vous devrez résoudre ce problème vous-même ou de fournir le second argument pour définir le chemin de base.

Autres conseils

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

print "FOO: $foo\n";

J'utilise abs_path de Cwd puis utiliser une expression régulière pour convertir les barres obliques quand je vraiment en ont besoin fait. Mais j'ai trouvé que, pour la plupart des utilisations, des barres obliques de style Unix fonctionnent très bien. Il est seulement pour les occasionnels « passer un nom de fichier à ce programme fâcheusement limité » que je finis par avoir besoin de convertir les barres obliques.

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

Mais .. J'utilise beaucoup de chemins de réseau, avec ou sans référence de lecteur mappé. Votre kilométrage peut varier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top