主題是探討如何去讀取檔案的屬性資料,檔案的屬性資料的讀取可應用在很多地方,但詳細的相關資料不多,僅以所能找到的資料來探討
何謂檔案的屬性資料?在查看一個檔案的內容時,可看到屬性和進階屬性,還有很多隱藏的屬性沒在內容顯示之中。這次的主題只針對內容顯示的可變更屬性和沒顯示的重要屬性做讀取
程式面板如下圖:
屬性的狀態全以LED的True和False狀態來表示
LED的意義如下:
唯讀 → 代表此檔案為唯讀屬性
隱藏 → 代表此檔案為隱藏屬性
系統 → 代表此檔案為作業系統檔案
目錄 → 代表此檔案為目錄檔案
封存 → 代表此檔案有勾選"檔案已經可以開始封存"這選項
普通 → 代表此檔案為普通檔案,但有勾選"為方便快速搜尋檔案,對此檔案製作內容索引"這一項
暫存 → 代表此檔案為暫存檔案
壓縮 → 代表此檔案有勾選"壓縮內容,節省磁碟空間"這選項,要注意這裡的"壓縮"和Winzip壓縮檔是不一樣的
無屬性 → 代表此檔案所有選項都沒有勾選
錯誤 → 代表此檔案讀取失敗
程式的部份:
由於沒有直接的方法可以讀取檔案屬性,必須調用作業系統的API程式來讀取。在這裡使用Cll Library Function Node這個元件來設定
在Cll Library Function Node元件上按滑鼠右鍵點選Configure...這一項
會跳出設定視窗,點選Browse...那一項,會在跳出一個選擇檔案的視窗
在選擇檔案的視窗內,到"C:\Windows\system32"這個資料夾內選擇kernel32.dll這個檔案後按"開啟"
在Function Name那一欄選擇GetFileAttributesW這一項,這一項的意義代表為讀取屬性
在Calling Conventions那一欄選擇stdcall(WINAPI)這一項,代表調用API程式
在Type那一欄選擇Numeric這一項,表示將結果輸出為數值。這個數值是將各屬性的True和False狀態轉成1和0的二進制數值再轉換為十進制數值後輸出
底下Data Type那一欄保持內定為32bit的數值格式
如此輸出項目設定完成,再來要設定輸入項目
在同一視窗內按Add a Parameter After
會在Parameter那一欄自動新增arg1這一項,將Type那一欄設定為String,因為檔案路徑無法直接輸入,必須以字串方式輸入
設定好後的Cll Library Function Node元件會變成如下圖有可供輸出入的連接點
最後是將數值輸出結果還原成布林狀態,首先用Case Structure元件來判定是否讀檔成功,若讀不到檔案,輸出的數值為-1,將錯誤的LED放在-1這一頁顯示
有成功讀到檔案輸出一定不為-1,剩下的LED就全放在Default這一頁顯示
還原程式一開始先以Number To Boolean Array元件將數值轉成布林陣列,接著以Index Array元件分離出需要的屬性。每個屬性在陣列中的索引位置是固定的,所以只要照圖設定即可