Was Perl Modul (e) verwende ich einen absoluten Pfad von einem eines unter Windows relativ zu erhalten (einschließlich Dateinamen)?

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

Frage

Ich kann nur vorstellen, ich bin nicht richtig gesucht; dies scheint wie eine offensichtliche Frage hier gestellt werden. Ich entschuldige mich, wenn dies ist ein Duplikat.

Ich schreibe ein Perl-Programm, das einen Dateinamen als Befehlszeilenargument nehmen. Ich brauche den Namen (oder die Dateinamen mit einem relativen Pfad angebracht ist) in einen absoluten Pfad (speziell auf der Arbeit mit Win32 :: OLE).

konvertieren

Ich habe versucht, mit Cwd 's 'abs_path', und das fast tut, was ich will, aber es gibt sie einen Unix-Pfad statt einer Win32 ein verwenden.

Gibt es ein Modul, das den Weg konvertieren, oder vielleicht ein bessere Modul Verwendung in erster Linie?

War es hilfreich?

Lösung

Ich verwende rel2abs von File :: Spec . Sie müssen jedoch vorsichtig sein: Das könnte Anruf getdcwd von Cwd, und es wird angenommen, dass Sie das aktuelle Arbeitsverzeichnis für das aktuelle Laufwerk mögen. Wenn die Datei auf einem anderen Laufwerk ist, werden Sie zu fix haben, dass bis selbst oder das zweite Argument liefert den Basispfad zu setzen.

Andere Tipps

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

print "FOO: $foo\n";

Ich verwende CWDs abs_path und dann einen regulären Ausdruck verwenden, um die Schrägstriche zu umwandeln, wenn ich wirklich muss es getan. Aber ich habe festgestellt, dass für die meisten Anwendungen, Unix-Stil Schrägstriche gut funktionieren. Es ist nur für die gelegentliche „einen Dateinamen übergeben zu diesem annoyingly beschränkt Programm“, dass ich die Schrägstriche zu konvertieren am Ende brauchen.

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

Aber dann .. ich eine Menge von Netzwerkpfaden, mit oder ohne eine zugeordneten Laufwerk Referenz. Ihre Ergebnisse können variieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top