在Perl中创建新文件并保存到open directory
基本上,我正在尝试创建一个包含今天日期的新目录,然后创建一个新文件并将其保存在该文件夹中 我可以让所有步骤单独工作,但是文件不希望保存在目录中。基本上,我的工作是:在Perl中创建新文件并保存到open directory,perl,directory,Perl,Directory,基本上,我正在尝试创建一个包含今天日期的新目录,然后创建一个新文件并将其保存在该文件夹中 我可以让所有步骤单独工作,但是文件不希望保存在目录中。基本上,我的工作是: mkdir($today); opendir(DIR, $today) or die "Error in opening dir $today\n"; open SAVEPAGE, ">>", $savepage or die "Unable to open $savepage for output -
mkdir($today);
opendir(DIR, $today) or die "Error in opening dir $today\n";
open SAVEPAGE, ">>", $savepage
or die "Unable to open $savepage for output - $!";
print SAVEPAGE $data;
close(SAVEPAGE);
closedir(DIR);
我做了很多搜索,试图找到一个合适的例子,但不幸的是,我尝试过的查询中的每一个单词都有数百万次点击“打开/保存/文件/目录”等。我意识到我可以更好地处理错误等,这将是下一步,一旦我的功能正常工作。谢谢您的指点,干杯。只需在要打开的文件前面加上目录名即可。不需要opendir
mkdir($today);
open SAVEPAGE, ">>", "$today/$savepage";
只需在要打开的文件前面加上目录名。不需要opendir
mkdir($today);
open SAVEPAGE, ">>", "$today/$savepage";
与其一直使用完全限定的文件名,您可能更愿意在打开文件之前使用
chdir$today
。这将更改当前工作目录,并强制相对于新目录打开使用相对路径或根本没有路径指定的文件
此外,使用pragma将避免检查打开
、关闭
等状态。;出于许多原因,使用词法文件句柄更可取,包括当filehandle变量超出范围时隐式关闭文件
这就是代码的外观
use strict;
use warnings;
use autodie;
my $today = 'today';
my $savepage = 'savepage';
my $data = 'data';
mkdir $today unless -d $today;
{
chdir $today;
open my $fh, '>>', $savepage;
print $fh $data;
}
但是,如果您的程序处理多个目录中的文件,那么在它们之间来回执行chdir
是很困难的,并且必须显式地保存原始目录,否则它将被遗忘。在这种情况下,模块可能会有所帮助。它提供了$CWD
包变量,如果当前工作目录的值发生更改,该变量将更改当前工作目录。它也可以像任何其他包变量一样进行本地化,以便在本地化块结束时恢复原始值
这里有一个例子
use strict;
use warnings;
use File::chdir;
use autodie;
my $today = 'today';
my $savepage = 'savepage';
my $data = 'data';
mkdir $today unless -d $today;
{
local $CWD = $today; # Change working directory to $today
open my $fh, '>>', $savepage;
print $fh $data;
}
# Working directory restored to its previous value
与其一直使用完全限定的文件名,您可能更愿意在打开文件之前使用
chdir$today
。这将更改当前工作目录,并强制相对于新目录打开使用相对路径或根本没有路径指定的文件
此外,使用pragma将避免检查打开
、关闭
等状态。;出于许多原因,使用词法文件句柄更可取,包括当filehandle变量超出范围时隐式关闭文件
这就是代码的外观
use strict;
use warnings;
use autodie;
my $today = 'today';
my $savepage = 'savepage';
my $data = 'data';
mkdir $today unless -d $today;
{
chdir $today;
open my $fh, '>>', $savepage;
print $fh $data;
}
但是,如果您的程序处理多个目录中的文件,那么在它们之间来回执行chdir
是很困难的,并且必须显式地保存原始目录,否则它将被遗忘。在这种情况下,模块可能会有所帮助。它提供了$CWD
包变量,如果当前工作目录的值发生更改,该变量将更改当前工作目录。它也可以像任何其他包变量一样进行本地化,以便在本地化块结束时恢复原始值
这里有一个例子
use strict;
use warnings;
use File::chdir;
use autodie;
my $today = 'today';
my $savepage = 'savepage';
my $data = 'data';
mkdir $today unless -d $today;
{
local $CWD = $today; # Change working directory to $today
open my $fh, '>>', $savepage;
print $fh $data;
}
# Working directory restored to its previous value
您将
opendir
与chdir
混淆。前者“打开”目录,即读取其包含的文件名。后者会更改您的工作目录,如*nix和windows中命令提示符下的命令cd
。您将opendir
与chdir
混淆。前者“打开”目录,即读取其包含的文件名。后者会更改您的工作目录,如*nix和windows中命令提示符下的命令cd
。@ChrisKeep检查答案是否已被接受以帮助其他人:)。谢谢-完成。昨天发现答案太快,无法同时将其标记为已接受:)@ChrisKeep检查答案是否已接受以帮助其他人:)。谢谢-完成。昨天发现答案太快,无法同时将其标记为已接受:)非常感谢您提供的详细答案,我将在进一步开发脚本时记住它。非常感谢您提供的详细答案,我将在进一步开发脚本时记住它。