我一直在嘗試在SHGetFolderPath返回的路徑中寫入文件。但是,隨着文件被創建,它已被寫保護。以下是我的代碼:使用CreateFile函數創建文件會導致寫保護文件
#include <Windows.h>
#include <Shlobj.h>
#include <iostream>
#include <Shlwapi.h>
int main()
{
HANDLE hfile;
TCHAR szPath[MAX_PATH];
char dataBuffer[] = "Some data to write here";
DWORD dwBytesWritten = 0;
if(SUCCEEDED(SHGetFolderPath(NULL,CSIDL_COMMON_APPDATA,NULL,0, szPath)))
{
std::cout << szPath << std::endl;
PathAppend(szPath,TEXT("lpa"));
std::cout << szPath << std::endl;
PathAppend(szPath,TEXT("config"));
std::cout << szPath << std::endl;
CreateDirectory(szPath, NULL);
PathAppend(szPath, TEXT("lpa.config"));
std::cout << szPath << std::endl;
hfile = CreateFile(szPath,GENERIC_READ|GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);
/*WriteFile(hfile,dataBuffer,(DWORD)strlen(dataBuffer),&dwBytesWritten,NULL);
std::cout << szPath <<std::endl;*/
}
}
的代碼創建在下的文件:\ ProgramData \ LPA \ CONFIG \ lpa.config,但編輯的文件會彈出對話框說WriteProtection。我在這裏做錯了什麼?
你對你的機器有管理權限嗎?我在Visual Studio 2013下編譯了你的程序,執行它。我可以編輯該文件。我沒有遇到任何問題。 – user1 2014-12-05 06:40:27
我以管理員身份運行Visual Studio。這是否帶來錯誤? – Pant 2014-12-05 06:45:34
是的,當您以管理員權限運行VS實例時,會爲創建的文件分配特殊權限。以非管理員身份作爲程序運行或仔細使用SECURITY_DESCRIPTOR。 http://msdn.microsoft.com/en-us/library/aa446595.aspx 鏈接中的示例顯示瞭如何創建註冊表項,您可以將CreateFile()改爲。 – user1 2014-12-05 07:01:22