Genero 檔案系統處理

先把之前寫過的整理整理,讓大家有個管道可以更瞭解Genero語言。

Genero在2.0版之後,增加一些外掛的函式庫,以擴展原有不足的部份。這些函式﹝function﹞,必需用『IMPORT』的方式將函式庫掛載到程式裡面來,才可以使用。利用這種技法開發出來的項目越來越多,如本文介紹的檔案系統處理﹝os﹞、Web Service及一些數學函式庫。

使用之前

在使用這些函式之前,需要在4gl啟始處﹝DATABASE指令之前﹞寫入『IMPORT os』

使用當下

使用此類函式時,必需用『os.Path.METHODS﹝METHOD請參照下表﹞』的方式來使用,例如copy,就是 CALL os.Path.copy(source, target) RETURNING li_success

Methods ﹝下表引用自 4JS 網頁:http://www.4js.com/online_documentation/fjs-fgl-2.11.01-manual-html/User/Ext_os_Path.html﹞以下紅字部份表示在TIPTOP GP程式內常見,沒翻譯的部份則比較少用到。

function 說明
separator

回傳path的分隔符號,Windows為 ,UNIX為 / 通常可以用來判斷系統是在哪個平台下運行,如 IF os.Path.separator() = "/" THEN….

pathseparator 類似上一個,回傳用在環境變數 (如 %PATH% 或 $PATH) 裡的路徑分隔符號
Windows為:,UNIX為;

basename

回傳『主要檔名』部份

dirname

回傳『目錄部份』檔名

rootname

回傳主要檔名﹝以上三組,請參照下方對照表即可瞭解﹞join 合併路徑用,如:LET ls_dir = os.Path.join ( "/etc", "passwd") 此時 ls_dir = /etc/passwd

extension Returns the file extension.
exists

檢視檔案是否存在
IF os.Path.exists(ls_filename) THEN…存在則回傳TRUE,沒有檔案即為FALSE

chrwx

變更UNIX上的rwx屬性,要計算對應值,而且只能用在UNIX 例如希望變更屬性為 777,則計算式為 64* 7 + 8* 7 + 1 * 7 = 511
CALL os.Path.chrwx(ls_filename, 511) RETURNING li_success (回傳TRUE / FALSE)

dirsort (搭配diropen/dirnext等) 如果要執行 ls / dir 指令來 check 檔案列表,請參考標準程序進行
chdir 變更目錄
mkdir mkdir
delete 刪除檔案或目錄
rename 更新目錄名或檔名
copy 複製檔案
atime 回傳檔案上次被讀取時間
mtime 回傳檔案上次被修改時間
readable 檢查檔案是否可被讀取
writable 檢查檔案是否可被寫入
executable 檢查檔案是否可被執行
isfile 檢查是否為一個檔案路徑
isdirectory 檢查是否為一個目錄路徑
islink 檢查是否為UNIX的soft link
isrootpath 檢查是否為根路徑
size 回傳檔案大小
chvolume 更換Windows的工作磁碟機

os.Path 指令操作範例對照表

原始資料 dirname basename rootname extension
. . .   NULL
.. . .. . NULL
/ / / / NULL
/usr/lib /usr lib /usr/lib NULL
/usr/ / usr /usr/ NULL
usr . usr usr NULL
file.xx . file.xx file xx
/tmp.yy/file.xx /tmp.yy file.xx /tmp.yy/file xx
/tmp.yy/file.xx.yy /tmp.yy file.xx.yy /tmp.yy/file.xx yy
/tmp.yy/ / tmp.yy /tmp.yy/ NULL
/tmp.yy/. /tmp.yy . /tmp.yy/ NULL

當可以善用這一些函式時,程式就可以和檔案系統進行一些互動,增加操作上的便利性。