2013-03-28 165 views

回答

3
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(); 
+0

我用你认为上面的代码,但作为预期的输出不来了。输出如下:$ path =“./”$ name =“C:\ sample \ file.txt” – Rahul 2013-03-28 07:54:17

+0

这是因为你的代码是越野车。您实际上并没有在'$ FullPath'中放置'C:\ sample \ file.txt'。查看更新。 – ikegami 2013-03-28 08:01:17

+0

实际上有一个html页面,其中使用浏览按钮选择了一个文件,当按下提交按钮时,该值应该传递给perl程序。所以当我使用浏览按钮选择一个文件,并按下提交按钮时,传递给perl程序的值是“C:\ sample \ file.txt”。但我只想要文件名。所以你可以建议一些方法来做到这一点? – Rahul 2013-03-28 08:03:11

0

我建议你使用splitpathFile::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 
相关问题