我有一个perl程序,其中有一个变量,其值是文件的完整路径。如何从包含完整文件路径的字符串在perl中分离文件名和文件路径
例如:
$FullPath = "C:\sample\file.txt";
我想提取在$文件名可变的文件名(file.txt
)和FilePath
变量路径(C:\sample\
)。
任何人都可以请帮我做一个示例代码。
感谢
我有一个perl程序,其中有一个变量,其值是文件的完整路径。如何从包含完整文件路径的字符串在perl中分离文件名和文件路径
例如:
$FullPath = "C:\sample\file.txt";
我想提取在$文件名可变的文件名(file.txt
)和FilePath
变量路径(C:\sample\
)。
任何人都可以请帮我做一个示例代码。
感谢
use File::Basename qw(fileparse);
my ($fname, $dir) = fileparse($FullPath);
请注意,您$FullPath
不包含C:\sample\file.txt
。为了得到这一点,你需要
my $FullPath = "C:\\sample\\file.txt";
或
my $FullPath = 'C:\sample\file.txt';
始终使用use strict; use warnings;
!它会因为没有意义的"\s"
而发出警告。
要解析的Windows路径的任何机器上,你可以使用以下命令:
use Path::Class qw(foreign_file);
my $file = foreign_file('Win32', $FullPath);
my $fname = $file->basename();
my $dir = $file->dir();
我建议你使用splitpath
从File::Spec::Functions
。该函数将卷,目录和文件名作为三个单独的值返回。
下面的代码将这些值放入一个数组中,然后删除第二个(目录)元素并将其附加到第一个,给出完整路径和文件名,如您在@path
中所需。
use strict;
use warnings;
use File::Spec::Functions 'splitpath';
my $full_path = 'C:\sample\file.txt';
my @path = splitpath $full_path;
$path[0] .= splice @path, 1, 1;
print "$_\n" for @path;
输出
C:\sample\
file.txt
我用你认为上面的代码,但作为预期的输出不来了。输出如下:$ path =“./”$ name =“C:\ sample \ file.txt” – Rahul 2013-03-28 07:54:17
这是因为你的代码是越野车。您实际上并没有在'$ FullPath'中放置'C:\ sample \ file.txt'。查看更新。 – ikegami 2013-03-28 08:01:17
实际上有一个html页面,其中使用浏览按钮选择了一个文件,当按下提交按钮时,该值应该传递给perl程序。所以当我使用浏览按钮选择一个文件,并按下提交按钮时,传递给perl程序的值是“C:\ sample \ file.txt”。但我只想要文件名。所以你可以建议一些方法来做到这一点? – Rahul 2013-03-28 08:03:11