從檔案控制代碼獲得全路徑 (二)

2021-06-03 12:49:37 字數 1058 閱讀 3867

從檔案控制代碼獲得全路徑這個問題,似乎是個「老大難」問題。

很久以前我就在水木清華見到過。最近又不斷有人提到。

其實問題並不難,只是解決辦法有點繞,不是呼叫乙個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....