亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: 若文件名中包含空格字符 如何打開文件? [打印本頁]

作者: sunzhiguolu    時間: 2017-04-15 11:42
標題: 若文件名中包含空格字符 如何打開文件?
RT,
如文件名 a b.txt, b c.txt

方法試了好多,無一奏效。請大家?guī)兔χ更c。謝謝大家。。。


作者: sunzhiguolu    時間: 2017-04-15 13:39
本帖最后由 sunzhiguolu 于 2017-04-15 13:42 編輯


比如這樣的文件。


作者: sunzhiguolu    時間: 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);
復制代碼
執(zhí)行腳本時, 提示:"Invalid argument at ..."錯誤。。。


作者: 大米白面    時間: 2017-04-15 22:15
如果是*nix環(huán)境,用單引號引用即可。
如果是Windows環(huán)境,在雙引號引用的字符串中可以用 \ 轉義。
作者: sunzhiguolu    時間: 2017-04-16 00:28
本帖最后由 sunzhiguolu 于 2017-04-16 00:54 編輯

回復 4# 大米白面
謝謝您的幫助,還有一個問題向您請教。(我的測試環(huán)境就是 Windows)
如:文件名中包含一些特殊字符,如下圖所示:

進行文件名的讀取時,得到的是一個短名稱 (Windows 8.3 短名稱)。對于此類文件名不知該如何處理。還請您提供一些處理經(jīng)驗,謝謝。。。

問題代碼:
  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
[attach]700824[/attach]

output.jpg (5.18 KB, 下載次數(shù): 422)

Output

Output

作者: sunzhiguolu    時間: 2017-04-16 18:42
本帖最后由 sunzhiguolu 于 2017-04-16 18:43 編輯

有哪位大神知道該如何處理這種情況嗎? 以前沒有遇到過這種情況,還請大家多多幫忙,謝謝。

作者: zhouzhen1    時間: 2017-04-16 22:25
關于Windows 8.3短文件名這個,我手上只有一個WinXP的虛擬機,剛才用Strawberry Perl 5.24試了沒有問題。

另外網(wǎng)上有人說可以用Win32::LongPath
http://stackoverflow.com/questio ... d-as-8-3-on-windows

作者: sunzhiguolu    時間: 2017-04-17 16:40
本帖最后由 sunzhiguolu 于 2017-04-17 16:42 編輯

回復 7# zhouzhen1
非常感謝您的幫助,按照您提供的思路能夠將路徑下的 htm 文件讀出來了。由于文件名中包含一些特殊字符導致 在實際讀取文件時遇到了一些問題。


測試代碼如下:
  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. }
復制代碼
實際輸出結果:




作者: sunzhiguolu    時間: 2017-04-17 16:53
這個是原始文件名:

作者: sunzhiguolu    時間: 2017-04-18 09:06
明明是看到文件名了,由于其中包含特殊字符的原因 導致文件還是無法找到。
文件的內(nèi)容存在編碼的問題,這個文件名出現(xiàn)此類情形該如何處理。
請各位大神出手相助,謝謝。。。
作者: sohusina    時間: 2017-04-18 12:31
看了你的帖子我特意嘗試了一下,我是試的笑臉符號放到文件名里面,結果在windows下很難通過,(linux下我沒有試過)。我找了一下原因,笑臉符號屬于unicode字符集,但是windows終端是gbk編碼,而笑臉符號的0x236a已經(jīng)超出了gbk的范圍,也就是說,除非把輸出終端的編碼改成utf8模式可能才有解。這是我的分析,不知正確否?
作者: sunzhiguolu    時間: 2017-04-18 16:39
回復 11# sohusina
謝謝您的分析,非常感謝幫忙。


作者: sditmaner    時間: 2017-04-19 11:01
如果是*nix環(huán)境,用單引號引用即可
作者: zhouzhen1    時間: 2017-05-05 22:55
回復 8# sunzhiguolu

兩個點:1. print出現(xiàn)亂碼,可能是需要在print的時候encode成gb2312(如果你是中文windows的話)
2. 文件測試不能直接用-e。如果看Win32::LongPath的SYNOPSIS段,你會發(fā)現(xiàn)它用的是一個testL方法來做文件測試

作者: sunzhiguolu    時間: 2017-05-06 21:01
回復 14# zhouzhen1
謝謝您的回復,
我的文件名稱多帶有 Unicode 字符 (如:一些特殊字符, 在 Windows 環(huán)境), 這些文件名在我利用 opendir, opendirL 方法列取文件時
無法對 unicode 文件名進行正確的解碼 導致利用 -e -f 操作符的判斷失敗。不知道我理解的是否有誤,還請指點一下,謝謝您再次幫助。


作者: 523066680    時間: 2017-05-16 14:55
本帖最后由 523066680 于 2017-05-16 14:57 編輯

針對 Windows 下的特殊文件名處理,我在這個帖子下做了各種總結

[總結]Perl在遇到Unicode字符文件名時的各種處理方法
http://code-by.org/viewtopic.php?f=17&t=131


如果要讀取Unicode字符的文件列表 可以暫時用 `cmd /U dir /s /b` 的方法
/U參數(shù)開啟Unicode輸出模式

處理的使用 用Win32 API 系列模塊,或者安裝 Win32::Unicode 模塊


作者: sunzhiguolu    時間: 2017-05-16 17:34
回復 16# 523066680
好,非常感謝您的幫助。我一定仔細拜讀。。。


作者: zealoussnow    時間: 2017-08-02 12:16
用"\ "代替空格

作者: 本友會機友會攝友會    時間: 2017-08-09 15:33
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
作者: 本友會機友會攝友會    時間: 2017-08-09 15:34
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
作者: sunzhiguolu    時間: 2017-08-10 09:10
回復 19# 本友會機友會攝友會
的確是天生的免疫,能講講為什么嗎?






歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2