根据用户输入的文件名打开特定目录中的文件

时间:2012-10-15 19:38:36

标签: perl file-io directory user-input

我正在尝试根据文件名的用户输入打开位于\\\server\folder\folder\folder\filename.csv的文件。该文件将始终为csv文件,但名称将根据部门而不同。该目录将始终相同,但它不是Perl所在的目录。

我在尝试打开文件时遇到问题。我试图制作2个变量,1个用于目录,1个用于文件名,但是当我尝试打开$directory\\$FileName时,我只是遇到了错误。我试图用硬编码的目录和文件名变量做一个开放语句,但Perl认为变量是文件名的一部分(这是有意义的)。这甚至可能吗?

我打开文件后,我有运行的代码,它将编辑文件本身(这很好),然后我想将文件保存在新的位置。这个新位置与目录相同,但我想为它添加另一个文件夹级别,然后添加相同的文件名。一种“更改前”文件位置和“更改后”文件位置。

print "What is your FULL file name going to be with extension included?";
my $fileInName = <>; 
my $@dirpath= '\\\\Server\\Folder1\\Folder2\\Folder3\\Folder4\\Sorted_files\\';
my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || 
    Win32::OLE->new('Excel.Application', 'Quit'); 
my $Book = $Excel->Workbooks->Open($directory $file); 
my $Sheet = $Book->Worksheets(1);
$Sheet->Activate(); 

这就是我现在的代码。我也尝试了以下内容:

my $@dirpath= '\\\\server\\folder1\\folder2\\folder3\\call_folder4\\Sorted_files\\$fileName';

当然我收到了“无法找到文件的错误:

如果我对整个路径名进行硬编码,那么我的文件打开效果很好,但是我不希望有25个单独的脚本,唯一的区别就是文件名。

2 个答案:

答案 0 :(得分:0)

使用file::spec模块。它是可移植的,您不必担心在路径中转义斜杠字符(更新:大多数情况下都是如此,但在这种情况下,您仍然需要转义服务器引用,如下所示,在@dirpath的赋值中)。

例如:

use File::Spec::Functions;

# get users file from the cmd line arg
my $usersfile = $ARGV[0];

my @dirpath = qw/\\\server folder folder folder/;
my $filepath = catfile(@dirpath,$userfile);

# test existence
die "file does not exist" unless(-e $filepath);

答案 1 :(得分:0)

my $@dirpath= '\\Server\Folder1\Folder2\Folder3\Folder4\Sorted_files\';
my $Book = $Excel->Workbooks->Open($directory $file); 

甚至没有编译。它应该是:

my $dirpath = '\\\\Server\Folder1\Folder2\Folder3\Folder4\Sorted_files';
my $Book = $Excel->Workbooks->Open("$dirpath\\$file");