我可以使用什么 Perl 模块从 Windows 上的相对路径获取绝对路径(包括文件名)?

发布于 2024-08-07 02:16:36 字数 322 浏览 9 评论 0原文

我只能想象我没有正确搜索;这似乎是一个显而易见的问题。如果这是重复的,我很抱歉。

我正在编写一个 Perl 程序,它将使用文件名作为命令行参数。我需要将文件名(或附加相对路径的文件名)转换为绝对路径(特别是与 Win32::OLE 一起使用)。

我尝试使用 Cwd 的“abs_path”,这几乎达到了我想要的效果,但它返回它使用 Unix 风格的路径而不是 Win32 风格的路径。

是否有一个可以转换路径的模块,或者可能是一个更好的模块可以首先使用?

I can only imagine I'm not searching correctly; this seems like an obvious question to be asked here. My apologies if this is a duplicate.

I'm writing a Perl program that will take a filename as a command-line argument. I need to convert the filename (or the filename with a relative path attached) to an absolute path (specifically to work with Win32::OLE).

I tried using Cwd's 'abs_path', and that almost does what I want, but it returns it using a Unix-style path instead of a Win32 one.

Is there a module that will convert the path, or perhaps a better module to use in the first place?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

网名女生简单气质 2024-08-14 02:16:36

我使用 File::Spec 中的 rel2abs。但您必须小心:这可能会从 Cwd 调用 getdcwd,并且它会假设您需要当前驱动器的当前工作目录。如果文件位于其他驱动器上,您必须自行修复该问题或提供第二个参数来设置基本路径。

I use rel2abs from File::Spec. You have to be careful though: that might call getdcwd from Cwd, and it will assume that you want the current working directory for the current drive. If the file is on some other drive, you'll have to fix that up yourself or supply the second argument to set the base path.

z祗昰~ 2024-08-14 02:16:36
use File::Spec::Functions qw(rel2abs);
print rel2abs($ARGV[0]), "\n";
use File::Spec::Functions qw(rel2abs);
print rel2abs($ARGV[0]), "\n";
有木有妳兜一样 2024-08-14 02:16:36
my($foo) = abs_path($some_file);
$foo =~ s{/}{\\}g;

print "FOO: $foo\n";
my($foo) = abs_path($some_file);
$foo =~ s{/}{\\}g;

print "FOO: $foo\n";
阿楠 2024-08-14 02:16:36

我使用 Cwd 的 abs_path,然后在我真正需要时使用正则表达式来转换斜杠。但我发现对于大多数用途来说,Unix 风格的斜杠工作得很好。只是偶尔“将文件名传递给那个烦人的受限程序”,我最终需要转换斜杠。

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

但是然后..我使用了很多网络路径,无论有没有映射的驱动器引用。您的里程可能会有所不同。

I use Cwd's abs_path and then use a regex to convert the slashes when I really need it done. But I've found that for most uses, Unix-style slashes work just fine. It's only for the occasional "pass a filename to that annoyingly limited program" that I end up needing to convert the slashes.

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

But then.. I use a lot of network paths, with or without a mapped drive reference. Your mileage may vary.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文