從XP開(kāi)始,多出了一套叫ApplicationData的目錄,由于是NT內(nèi)核及多用戶(hù)的引用,因此在沒(méi)有管理員權(quán)限的帳號(hào)打開(kāi)安裝過(guò)的程序時(shí),應(yīng)用程序是無(wú)法寫(xiě)入自己的目錄的,因此早期的一些程序會(huì)因此遇到一些故障.
解決這個(gè)問(wèn)題的方法是獲取ApplicationData的目錄位置,根據(jù)自己應(yīng)用程序的名稱(chēng)創(chuàng)建配置文件.
這些網(wǎng)上都能搜到,主要是使用SHGetFolderPath的API,這里要說(shuō)下 int csidl這個(gè)參數(shù)的幾個(gè)區(qū)別:
CSIDL_COMMON_APPDATA 所有用戶(hù)都可以使用的應(yīng)用程序配置,映射All Users\Application Data
CSIDL_APPDATA 指定用戶(hù)使用的應(yīng)用程序配置,并且可以通過(guò)域同步漫游的,映射<user name>\Application Data
CSIDL_LOCAL_APPDATA 本機(jī)使用,不能漫游的應(yīng)用程序配置,映射<user name>\Local Settings\Applicaiton Data
另外,由于這些路徑使用起來(lái)并不方便,因此一般我們還是習(xí)慣在應(yīng)用程序下存儲(chǔ)配置文件,這就涉及一個(gè)檢測(cè)是否應(yīng)用程序文件夾有寫(xiě)權(quán)限的問(wèn)題.
我嘗試過(guò):
int _waccess(
const wchar_t *path,
int mode
);
MSDN里說(shuō)這個(gè)函數(shù)可以用于判定一個(gè)文件夾是否有寫(xiě)權(quán)限,但是實(shí)際測(cè)試中,這個(gè)函數(shù)對(duì)于有權(quán)限控制的文件夾毫無(wú)作用,始終返回可寫(xiě).
因此,最笨的方法,依然是直接在應(yīng)用程序目錄下創(chuàng)建一個(gè)臨時(shí)文件,創(chuàng)建成功說(shuō)明可寫(xiě),然后再刪除這個(gè)文件(好惡心的方法).不過(guò)話(huà)又說(shuō)回來(lái),這是C時(shí)代的函數(shù),應(yīng)該不會(huì)做太多平臺(tái)相關(guān)的判斷.