【问题标题】:Open files in specific directory based on inputed file name by user根据用户输入的文件名打开特定目录中的文件
【发布时间】:2012-10-15 19:38:36
【问题描述】:

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

我在尝试打开文件时遇到问题。我尝试创建 2 个变量,1 个用于目录,1 个用于文件名,但是当我尝试打开 $directory\\$FileName 时会抛出错误。我尝试使用硬编码的目录和文件名变量来执行 open 语句,但 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 个单独的脚本,唯一的区别是文件名。

【问题讨论】:

  • 您是否在路径周围使用单引号?请发布一些代码。那么只有一些事情会发生..
  • 显示演示问题的实际代码。 $directory\$FileName 不是有效的 Perl。 '$directory\$FileName'"$directory\$FileName" 也不正确。
  • @Amy 使用“编辑”按钮并将代码添加到您的问题中。不要在 cmets 中发布代码。
  • 我也试过了 my $@dirpath= '\\\\Server\\Folder1\\Folder2\\Folder3\\Folder4\\Sorted_files\\$fileName';

    正如预期的那样,它返回了文件未找到错误。

  • 对不起 - 对于 cmets 中的代码 - 我会更正....

标签: perl file-io directory user-input


【解决方案1】:

使用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);

【讨论】:

  • 看来您忘记在变量中添加一些符号了。
  • 谢谢!我最近一直在写 Python :-)
  • c 是否代表音量?因为我在那里看不到catpath 的任何使用,根据OP,音量实际上是\\server\folder
  • @David $dirpath 可能意味着@dirpath,因为您为其分配了一个列表。或者你的意思是写qq/c some path/
  • 只是一个占位符,而不是字面意思。 OP 可以在这里使用任何有效的路径。
【解决方案2】:
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"); 

【讨论】:

    猜你喜欢
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 2018-10-30
    • 1970-01-01
    • 2019-12-03
    • 2014-04-11
    • 1970-01-01
    相关资源
    最近更新 更多