從檔案控制代碼獲得全路徑這個問題,似乎是個「老大難」問題。
很久以前我就在水木清華見到過。最近又不斷有人提到。
其實問題並不難,只是解決辦法有點繞,不是呼叫乙個api就能解決的。
問題的關鍵在於,形如」x:」的dos裝置名都是符號鏈結(symbliclink),而檔案開啟後檔案物件中儲存的是邏輯卷裝置名(如」\device\harddiskvolumex」)。前者可以轉換成後者,而後者卻不能簡單地轉換成前者。以至於從控制代碼得到的路徑總是「缺少」碟符這一部分。實際上,把所有的」x:」都變成裝置名去匹配路徑就可以了。
下面是演示**,很簡單,所以就不加注釋啦 ^_^
#include
<
windows.h
>
#include
<
ntsecapi.h
>
#pragma
comment
(lib,"
ntdll.lib")
// copy from ddk
ntsysapi
ntstatus
ntapi
zwqueryobject(in
handle
objecthandle,in
ulong
objectinformationclass
,out
pvoid
objectinformation,in
ulong
objectinformationlength
,out
pulong
returnlength
optional);
bool
getpathbyhandle
(handle
hfile
, lpwstr
lpbuf
, dword
nbuf)}
p+= m+
1;}}
return
false;}
void
main
()else
}
獲得指定 PID 的程序可執行檔案全路徑
ifndef pslib h define pslib h dword winapi getprocessname dword dwprocessid,lptstr pszname,dword nsize,bool bfullpath endif pslib h 實現為 include includ...
從檔案控制代碼得到檔案路徑的函式 (一)
從檔案控制代碼得到檔案路徑的函式 主要思路 1.呼叫 getfileinformationbyhandle 函式得到指定檔案控制代碼的相應檔案資訊,再呼叫 getlogicaldrivestrings 函式得到所有驅動器碟符,用 getvolumeinformation 函式遍歷每個碟符,取得碟符的...
獲得檔案路徑
1 獲得絕對路徑 eg.c yuanzhenhai littlesea.txt 2 當前相對路徑 eg.littlesea.txt 3 獲得目錄上一層的相對路徑 假如已經知道當前路徑是.littlesea.txt 得到它的上一層路徑yuanzhenhai中的xiaohai.txt路徑的方法是 eg....