2017-05-09 20 views
0

想我設計一個文件管理器,並希望通過它的類型來實現文件的搜索假設然後這些方法之一將更有效率 -哪一個會更有效地搜索某種類型的文件?

  1. 使用的文件的名稱和修剪擴展的每個文件。

  2. 使用特定字節作爲我們正在搜索的文件類型,例如jpeg圖像。

bytes 0xFF, 0xD8 indicate start of image 

bytes 0xFF, 0xD9 indicate end of image 
+0

堆棧溢出通常不會處理假設問題。但是,似乎很清楚,根據文件名作出決定比打開和查看數據要快得多。 – lit

+0

你有什麼保證,文件名實際上代表文件中的內容類型?有關係嗎? – Soren

+0

是的,它不應該是錯誤的積極 – varnit

回答

1

既然你已經知道這是在開放之前的文件名吧,名字微調選項將可能更快。但是,如果擴展名與實際文件類型不匹配,那麼使用該方法可能會產生錯誤結果。

這樣做會節省一些系統調用(打開,讀取,也許fseek,關閉)。

0

假設您的目標是:「按文件類型搜索文件」,沒有進一步的限制,您必須通過檢查實際數據來完成。

但是,您可能會有一些誤報和誤報。如果您僅通過查找擴展名搜索圖像文件,則可以爲圖像文件,假陰性或「image.jpg」獲取「image.jpg?width = 1024 & height = 800」而不是「image.jpg」 「而不是」image.exe「,是一個誤報。

另一方面,您可以檢查文件中的第一對字節 - 圖像數據的大多數方案都有一個單獨的標頭。這種方法的失敗點更少。如果您的第一個字節類似於圖像文件的頭部,那麼您可能會得到一個假陽性結果。可能,但極不可能。如果標題被剝離(例如:在傳輸上,某種方式或產生該文件的壞腳本),您可能會得到一個錯誤的否定結果。也有可能也不太可能,甚至更多,如果不是更多。

小Unix工具file這樣做,並且曾經有一個容易解析文本文件,您可以使用自己的項目。它現在是一個大文件夾,其中有幾個單獨的文件甚至沒有被安裝,只是以一種預編譯的形式。您可以在線找到包含文本文件的文件夾,例如:http://bazaar.launchpad.net/~ubuntu-branches/ubuntu/saucy/file/saucy/files/head:/magic/Magdir/格式在手冊頁magic(5)中進行了介紹,該手冊也在線處於,例如:https://linux.die.net/man/5/magic

+0

感謝您的明確解釋 – varnit