Unicode下 获取当前工作路径并存入char*

本文介绍如何使用Visual Studio 2010获取文件夹内TXT文件的绝对路径,通过混合使用wchar_t与char类型的字符串,并利用Windows API函数GetCurrentDirectory与WideCharToMultiByte完成路径转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用VS2010开发时,在开发目录下建立了个文件夹并存放了txt文件

现在需要获取绝对路径

之前在网上找了很多 但总存在类型不匹配问题

以下为解决方案:

         char * filename= new char[100] ;
	WCHAR  *filename_L=  new WCHAR[50]; 
	GetCurrentDirectory(100,dbname_L);//获取当前工作路径 
	WideCharToMultiByte( CP_ACP, 0, dbname_L, -1,   dbname, 50, NULL, NULL ); //wchar*转化为char*
	strcat(filename,<a target=_blank href="file://\\test_result\\mytext.txt">\\test_result\\mytext.txt</a>);//获取文件的完整路径


 

BOOL CKbdLEDDlg::GetKeyboardDevicePath(void) { HDEVINFO hDevInfo; DWORD dwIndex; ULONG nLen; DWORD dwSize; DWORD dwRegType; char *pszName; char cDevicePath[DEVICEPATHNAME_MAX]; char cClass[128]; GUID KeyboardGuid; SP_DEVICE_INTERFACE_DATA sDeviceInterfaceData; PSP_DEVICE_INTERFACE_DETAIL_DATA pDeviceDetailData; SP_DEVINFO_DATA sDevInfo; KeyboardGuid = GUID_DEVINTERFACE_KEYBOARD; hDevInfo = SetupDiGetClassDevs(&KeyboardGuid, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); if (hDevInfo == INVALID_HANDLE_VALUE) { return TRUE; } dwIndex = 0; ZeroMemory(&sDeviceInterfaceData, sizeof(SP_DEVICE_INTERFACE_DATA)); sDeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); while (1) { if (SetupDiEnumDeviceInterfaces(hDevInfo, 0, &KeyboardGuid, dwIndex++, &sDeviceInterfaceData) == FALSE) { break; } nLen = 0; //詳細情報サイズを取得 SetupDiGetDeviceInterfaceDetail(hDevInfo, &sDeviceInterfaceData, NULL, 0, &nLen, NULL); pDeviceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA) + sizeof(TCHAR) * nLen); if (pDeviceDetailData == NULL) { SetupDiDestroyDeviceInfoList(hDevInfo); return TRUE; } pDeviceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); ZeroMemory(&sDevInfo, sizeof(SP_DEVINFO_DATA)); sDevInfo.cbSize = sizeof(SP_DEVINFO_DATA); //詳細情報を取得 if (SetupDiGetDeviceInterfaceDetail(hDevInfo, &sDeviceInterfaceData, pDeviceDetailData, nLen, &nLen, &sDevInfo) == FALSE) { free(pDeviceDetailData); return TRUE; } strcpy_s(cDevicePath, pDeviceDetailData->DevicePath); free(pDeviceDetailData); dwSize = 0; SetupDiGetDeviceRegistryProperty(hDevInfo, &sDevInfo, SPDRP_CLASS, &dwRegType, NULL, 0, &dwSize); pszName = (char *)malloc(sizeof(char) * dwSize); if (pszName == NULL) { SetupDiDestroyDeviceInfoList(hDevInfo); return TRUE; } if (SetupDiGetDeviceRegistryProperty(hDevInfo, &sDevInfo, SPDRP_CLASS, &dwRegType, (BYTE*)pszName, dwSize, &dwSize) == FALSE) { free(pszName); continue; } strcpy_s(cClass, pszName); free(pszName); if (!strcmp(cClass, "Keyboard")) { strcpy_s(cKeyboardDevicePath[nKeyboardCount], cDevicePath); nKeyboardCount++; } } SetupDiDestroyDeviceInfoList(hDevInfo); return FALSE; }每一句代码都解释一下,解释的详细一些,并且对所包含的知识进行拓展
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值