程式扎記: [Perl 範例代碼] Useful Function : 取出檔案路徑中的目錄路徑

標籤

2010年9月27日 星期一

[Perl 範例代碼] Useful Function : 取出檔案路徑中的目錄路徑

前言 :
某些場合, 我們需要針對某些檔案的路徑取出該檔案的目錄路徑, 那你就可以參考下面的範例代碼.

範例代碼 :
這裡有個 Subroutine:getDirectory. 你可以傳進一個檔案的路徑當作輸入參數. 而該API 會回傳對應該檔案路徑的目錄Path. 採用了正則表示式的解法取出檔案路徑從頭到最後一個'/' 字元的字串並回傳, 如果傳進去的路徑不是一個合法的檔案路徑 (在 Windows 中), 則返回 Null. 另外該 API 目前只支援 Windows.
* test2.pl 代碼 :
  1. #!/usr/bin/perl -w  
  2. use Cwd;  
  3. ############################  
  4. #  Get Directory Subroutine  
  5. #  Parameter  
  6. #    In : $fp -> File path  
  7. #    Out : $directory -> File's directory path.  
  8. ############################  
  9. sub getDirectory {  
  10.     my $prefix = "  ##getDirectory##: ";  
  11.     my $fp = shift;  
  12.     print "Get folder path from " . $fp . "... \n";   
  13.     #Consider windows platform only  
  14.     if(-d $fp || $fp =~ /.*\/$/) { # 如果Input 是目錄且存在, 就直接返回.  
  15.         print $prefix . "Input is directory!\n";  
  16.         return $fp . "/";         
  17.     } else {  
  18.         #print $prefix . "Check $fp ...\n";  
  19.         if( $fp =~ /(^[a-zA-Z]:((\/(?! )[^\\\/:*?"<>|]+)+\/)|(\/))[^\\\/:*?"<>|]+$/){  
  20.             #print "Got it: $1\n";            
  21.             return $1;  
  22.         }  
  23.     }  
  24.        
  25. }  
  26. my $filepath = "C:/tmp/tmp2/test.txt";  
  27. my $base_dir = cwd() ;  
  28. $res1 = getDirectory $filepath;  
  29. print "\tResult1: " . $res1 . "\n";  
  30. $res2 = getDirectory $base_dir;  
  31. print "\tResult2: " . $res2 . "\n";  

執行結果 :
Get folder path from C:/tmp/tmp2/test.txt...
Result1: C:/tmp/tmp2/
Get folder path from E:/EclipseProjects/PerlPrac/src/test...
##getDirectory##: Input is directory!
Result2: E:/EclipseProjects/PerlPrac/src/test/

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!