檔案及目錄快取

2021-06-23 01:58:01 字數 1639 閱讀 1722

檔案及目錄在編譯器裡經常會用到。大家可以想想下,我們用的ide哪個沒有各種格式的檔案?

於是檔案、目錄查詢便提出更高的要求,要快速找到是否存在。

對於這個其實也很簡單,就是使用hash對映,將檔案、目錄名對映到乙個緩衝區裡,然後到緩衝區查詢對應的hash值即可。

fp有個全域性變數:

vardircache : tdirectorycache; 

即代表目錄的快取,內部實現如下:

tdirectorycache = class

private

fdirectories : tfphashobjectlist;    //存放已經快取過的目錄列表

function getdirectory(const adir:tcmdstr):tcacheddirectory;    

procedure tcacheddirectory.forceusecache;

begin

if not fcached then

begin

fcached:=true;

reload;      //由此將目錄所有檔案加入快取裡去

end;

end;   

procedure tcacheddirectory.reload;

vardir   : tsearchrec;

entry : pcacheddirectoryentry;

begin

freedirectoryentries;

directoryentries.clear;

if findfirst(includetrailingpathdelimiter(name)+allfilesmask,faanyfile or fadirectory,dir) = 0 then

begin

repeat

if ((dir.attr and fadirectory)<>fadirectory) or         //將檔案及非"."和".."目錄加入到快取裡去

((dir.name<>'.') and

(dir.name<>'..')) then

begin

dir.attr:=dir.attr or faarchive;

if not(tf_files_case_sensitive in source_info.flags) then

if (tf_files_case_aware in source_info.flags) then

begin

new(entry);

entry^.realname:=dir.name;

entry^.attr:=dir.attr;

directoryentries.add(lower(dir.name),entry)

endelse

directoryentries.add(lower(dir.name),pointer(ptrint(dir.attr)))

else

directoryentries.add(dir.name,pointer(ptrint(dir.attr)));

end;

until findnext(dir) <> 0;

findclose(dir);

end;

end; 

Android app的檔案快取目錄

data data packagename files 檔案快取目錄,一般存小的檔案快取,如果是,不建議放這裡,一般放到外接卡。file file getfilesdir 返回該目錄 寫檔案到該目錄下可以像這樣 fileoutputstream fos null try catch exceptio...

檔案及目錄結構

fastdfs 伺服器端執行時目錄結構如下 data 存放資料 檔案 logs 存放日誌檔案 其中,由配置檔案中的引數 base path 設定。一 tracker server tracker server目錄及檔案結構 data storage groups.dat 儲存分組資訊 storage...

檔案及目錄許可權

linux許可權主要分為讀,寫,執行三種控制,使用ls l命令檢視檔案或目錄資訊時,系統會顯示為r 讀取的許可權 w 寫的的許可權 x 執行的許可權 比如檢視我shell的資訊 第一列的第一字元為檔案型別 代表普通檔案,d代表目錄,l代表鏈結檔案,b或c代表裝置。第二個字元到第九個字元代表許可權,三...