Lo módulo (s) de Perl lo uso para obtener una ruta absoluta (incluyendo el nombre de archivo) de una relativa en Windows?

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

Pregunta

Sólo puedo imaginar que no estoy en busca correctamente; esto parece una pregunta obvia que se plantea aquí. Mis disculpas si esto es un duplicado.

Estoy escribiendo un programa en Perl que tendrá un nombre de archivo como un argumento de línea de comandos. Necesito convertir el nombre de archivo (o el nombre de archivo con una ruta relativa adjunto) a una ruta absoluta (específicamente para trabajar con Win32 :: OLE).

He intentado utilizar Cwd 's 'abs_path', y que casi hace lo que yo quiero, pero lo devuelve utilizando una ruta de estilo Unix en lugar de uno de Win32.

¿Hay un módulo que convertirá el camino, o tal vez un módulo de mejor usar en el primer lugar?

¿Fue útil?

Solución

Yo uso rel2abs de File :: Spec . Tienes que tener cuidado sin embargo: que podríamos llamar getdcwd de Cwd, y asumirá que desea que el directorio de trabajo actual de la unidad actual. Si el archivo está en alguna otra unidad, tendrá que arreglar eso por sí mismo o suministrar el segundo argumento para establecer la ruta de la base.

Otros consejos

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

print "FOO: $foo\n";

Yo uso abs_path Cwd y luego usar una expresión regular para convertir las barras cuando realmente tiene por qué hacerlo. Pero he encontrado que para la mayoría de usos, barras de estilo Unix funcionan bien. Es sólo para "pasar un nombre de archivo para que el programa molesto limitado" el ocasional que me acaban de tener que convertir las barras.

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

Pero entonces .. yo uso una gran cantidad de rutas de red, con o sin una referencia de unidad asignada. Su kilometraje puede variar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top