使用 tar 的复杂文件名时出错 ->用 Perl 写
在使用 tar->write() 时,我在使用复杂文件名时遇到错误。
代码是:
my $filename= $archive_type."_".$from_date_time."_".$to_date_time."tar";
$tar->write($filename);
我得到的错误是: 无法为“postProcessProbe_2010/6/23/3_2010/6/23/7.tar”创建文件句柄:
test.pl 第 24 行没有这样的文件或目录
如果我将 $filename 更改为像 out.tar 这样的简单字符串,一切正常。
While using tar->write() I am getting errors while using complex file names.
The code is:
my $filename= $archive_type."_".$from_date_time."_".$to_date_time."tar";
$tar->write($filename);
The error i get is:
Could not create filehandle for 'postProcessProbe_2010/6/23/3_2010/6/23/7.tar':
No such file or directory at test.pl line 24
If I change the $filename to a simple string like out.tar everything works.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
嗯,
/
是 *nix 系统上的目录分隔符(并且 Windows 内部可互换地对待/
和\
),我相信tar
文件,无论平台如何,都在内部使用它作为目录分隔符。我认为您无法在 *nix 或基于 Windows 的系统上创建包含
/
的文件名。即使你可以,这也可能会在以后带来一系列令人头痛的问题。以我的拙见,最好切换到更清晰的日期格式,例如
YYYYMMDD
。另外,当
sprintf
更清晰时,您正在使用字符串连接:my $filename= sprintf '%s_%s_%s.tar', $archive_type, $from_date_time, , $to_date_time ;
Well,
/
is the directory separator on *nix systems (and, internally Windows treats/
and\
interchangeably) and I believetar
files, regardless of platform use it internally as the directory separator.I do not think you can create file names containing
/
on either *nix or Windows based systems. Even if you could, that would probably create a whole bunch of headaches down the road.It would be better in my humble opinion to switch to a saner date format such as
YYYYMMDD
.Also, you are using string concatenation when
sprintf
would have been much clearer:my $filename= sprintf '%s_%s_%s.tar', $archive_type, $from_date_time, , $to_date_time;