我有一个 perl 程序,其中有一个变量,其值为文件的完整路径。
例如:
$FullPath = "C:\sample\file.txt";
我想提取file.txt
$FileName 变量中的文件名 ( ) 和变量中的路径 ( C:\sample\
) FilePath
。
任何人都可以通过示例代码帮助我做到这一点。
谢谢
我有一个 perl 程序,其中有一个变量,其值为文件的完整路径。
例如:
$FullPath = "C:\sample\file.txt";
我想提取file.txt
$FileName 变量中的文件名 ( ) 和变量中的路径 ( C:\sample\
) FilePath
。
任何人都可以通过示例代码帮助我做到这一点。
谢谢
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
from 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