[英]How to Get list of all file under the directory by type in C
我必須在C
模擬unix
的ls
函數。
我必須創建一個程序“通過C鍵入獲取任何目錄下的所有文件”。
我搜索並找到了獲取文件列表的程序,但是它們是按字母順序排序的; 我想按文件類型排序。 拜托,有人可以幫我嗎?
您必須將文件存儲在內存中的某個位置。 由於這看起來像是一個學校項目,因此建議將文件名加載到鏈表中,並采用其中一種算法對鏈表進行排序。 這很可能是練習本身的目的。
對於file type
我們假設“擴展名”,即即使某人可能已重命名.WMA文件並將其命名為.MP3,.MP3的類型也是“ Fraunhofer MPEG Layer 3”。 要檢測“ true”文件類型,您需要使用一種稱為“ magic file”的文件,並且那里有一個libmagic,但這值得嗎? (如果是博士學位論文或商業課程,答案為“是”。如果該課程由您的普通教授評分,則您可以判斷是否有被認為“太聰明”的風險)。
鏈接列表條目應為包含文件名和指向其擴展名的指針的struct
。 通過考慮擴展名是“文件名中最后一個點之后的內容”,可以找到此最后一個,因此可以利用strrchr
函數。 請記住,某些文件沒有擴展名。
您可以判斷是否采用節省內存的技巧,例如存儲指向擴展的指針,或使用strdup
復制擴展。 前者更快,更精簡,但是您必須記住,必須釋放第一個結構指針(文件名),而絕對不能釋放第二個結構指針。 取決於您是重視維護時間還是速度/內存,讓兩個指針的行為不同可能被認為是不好的編碼習慣(是)或聰明的破解(事實)。
至於文件名本身的檢索,沒有萬能的方法,因此導致了Boost等庫的開發。 但是對於學校項目,也許您可以限制為POSIX系統,並使用opendir
, readdir
, closedir
和stat
。
一個好的做法和明智的選擇是將不同功能中的操作(目錄檢索,列表排序,列表顯示)分開,以便您可以分別和漸進地對其進行測試(例如:文件夾檢索確實可以檢索所有內容,並且可以以未排序的順序顯示文件等)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.