免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 66315 | 回复: 20

若文件名中包含空格字符 如何打开文件? [复制链接]

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-04-15 11:42 |显示全部楼层
RT,
如文件名 a b.txt, b c.txt

方法试了好多,无一奏效。请大家帮忙指点。谢谢大家。。。

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-04-15 13:39 |显示全部楼层
本帖最后由 sunzhiguolu 于 2017-04-15 13:42 编辑

read_file.jpg
比如这样的文件。

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-04-15 15:18 |显示全部楼层
本帖最后由 sunzhiguolu 于 2017-04-15 15:20 编辑
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use utf8;

  5. chdir($ENV{'TEMP'});
  6. opendir(my $DHr, '.');
  7. foreach my $path (grep /\.html?\z/i, readdir($DHr)){
  8.     open(my $FHr, '<', $path) or die("$!");
  9.     while(<$FHr>){
  10.         print("$_\n");
  11.     }
  12.     close($FHr);
  13. }
  14. closedir($DHr);
复制代码
执行脚本时, 提示:"Invalid argument at ..."错误。。。

论坛徽章:
0
发表于 2017-04-15 22:15 |显示全部楼层
如果是*nix环境,用单引号引用即可。
如果是Windows环境,在双引号引用的字符串中可以用 \ 转义。

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-04-16 00:28 |显示全部楼层
本帖最后由 sunzhiguolu 于 2017-04-16 00:54 编辑

回复 4# 大米白面
谢谢您的帮助,还有一个问题向您请教。(我的测试环境就是 Windows)
如:文件名中包含一些特殊字符,如下图所示:

进行文件名的读取时,得到的是一个短名称 (Windows 8.3 短名称)。对于此类文件名不知该如何处理。还请您提供一些处理经验,谢谢。。。

问题代码:
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. opendir(my $DHr, 'z:\\') or die("Dir don't open!\n");
  5. foreach my $path (readdir($DHr)){
  6.     if(-f $path and $path =~ /\.txt\z/i){
  7.             print("{$path}\n");
  8.             open(my $FHr, '<', $path) or die("File '$path' don't open!\n");
  9.             print while(<$FHr>);
  10.             print("\n");
  11.             close($FHr);
  12.     }
  13. }
  14. closedir($DHr);
复制代码
perl abc.pl

Output

Output

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-04-16 18:42 |显示全部楼层
本帖最后由 sunzhiguolu 于 2017-04-16 18:43 编辑

有哪位大神知道该如何处理这种情况吗? 以前没有遇到过这种情况,还请大家多多帮忙,谢谢。

论坛徽章:
0
发表于 2017-04-16 22:25 |显示全部楼层
关于Windows 8.3短文件名这个,我手上只有一个WinXP的虚拟机,刚才用Strawberry Perl 5.24试了没有问题。

另外网上有人说可以用Win32::LongPath
http://stackoverflow.com/questio ... d-as-8-3-on-windows

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-04-17 16:40 |显示全部楼层
本帖最后由 sunzhiguolu 于 2017-04-17 16:42 编辑

回复 7# zhouzhen1
非常感谢您的帮助,按照您提供的思路能够将路径下的 htm 文件读出来了。由于文件名中包含一些特殊字符导致 在实际读取文件时遇到了一些问题。

Bad-FileName

Bad-FileName


测试代码如下:
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use File::Spec::Functions;
  5. use Win32::LongPath;

  6. my $wkPath = $ENV{'TEMP'};
  7. my $dir = Win32::LongPath->new();
  8. if($dir->opendirL($wkPath)){
  9.     foreach(grep /\.html?\z/i, $dir->readdirL()){
  10.         $_ = catfile($wkPath, $_);   #Output: drive:\path\filename.ext
  11.         print("{$_}");
  12.         print "\t", -e ? "(exists)" : "(not exists)", ".\n";
  13.     }
  14. }
复制代码
实际输出结果:



论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-04-17 16:53 |显示全部楼层
这个是原始文件名:

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-04-18 09:06 |显示全部楼层
明明是看到文件名了,由于其中包含特殊字符的原因 导致文件还是无法找到。
文件的内容存在编码的问题,这个文件名出现此类情形该如何处理。
请各位大神出手相助,谢谢。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP