windows api一日一練(dbghelp sdk)-002-MakeSureDirectoryPathExists,SearchTreeForFile

叫我英雄就行發表於2009-10-15

分類:General

函式:

MakeSureDirectoryPathExists 建立目錄,可一次建立多層目錄結構,很方便的函式

SearchTreeForFile:搜尋檔案並返回路徑

――――――――下面是程式碼和註釋――――――――――――――――――――

MakeSureDirectoryPathExists("E://dbghelp_study//DbgHelpFunctions//debug3//");

注意引數最後要有’/’,成功返回t

 

SearchTreeForFile("e://","DbgHelpFunctions.sln",szBuf);

找到就返回t,並且路徑被填充進buf,否則返回是f

上面的函式還可以註冊回撥,回撥的樣子是這樣的:

BOOL CALLBACK MySymRegisterCallbackProc64( // 函式名隨意換

HANDLE hProcess,// 4個引數都是系統傳進來的

ULONG ActionCode,// 這個是CBA_DEFERRED_SYMBOL_LOAD_CANCEL0x00000007

ULONG64 CallbackData,// 這個是0,無用

ULONG64 UserContext) // 這個是在外面註冊回撥時候設定的上下文

{

   // LPAPI_VERSION p = (LPAPI_VERSION)UserContext;

   return FALSE;

}

是使用這個函式註冊:

SymRegisterCallback64(hProcess,MySymRegisterCallbackProc64,(ULONG64)pVer);

Pver是個上下文引數,型別可以隨意,但要轉為ulong,這樣在回撥函式在被呼叫的時候上下文就能被傳進到MySymRegisterCallbackProc64了。

註冊回撥要在SearchTreeForFile執行之前,這樣在搜尋的時候,系統會每個資料夾都回撥一次定義的函式,方便在搜尋時由於時間可能很長造成的延遲。比如可以寫一些程式碼當搜尋n個資料夾之後cancel掉。

回撥中的返回值是f時候則搜尋函式繼續搜,為tstop

 

我在想如果要收集一個path下的多個子目錄中同一個名字的檔案,這個函式能不能用上呢?

相關文章