关于配置文件ini的读有关问题
关于配置文件ini的读问题
我在硬盘下的配置文件如下:
[PreviewBlock]
bPreviewBlock=0
[BFrameNum]
dwBFrameNum=0
[DownLoadPath]
chDownLoadPath=c:\DownLoad
[PictureSavePath]
chPictureSavePath=c:\Picture
[ClientRecordPath]
chClientRecordPath=c:\;
我读的时候是这样写的
CString buf="";
GetPrivateProfileString("PreviewBlock","bPreviewBlock","",buf.GetBuffer(100),100,csFilename);
GetPrivateProfileString("BFrameNum","dwBFrameNum","",buf.GetBuffer(100),100,csFilename);
g_struLocalParam.dwBFrameNum = atoi(buf);
GetPrivateProfileString("DownLoadPath","chDownLoadPath","",buf.GetBuffer(100),100,csFilename);
strncpy(g_struLocalParam.chDownLoadPath,(LPCTSTR)buf,sizeof(g_struLocalParam.chDownLoadPath));
GetPrivateProfileString("PictureSavePath","chPictureSavePath","",buf.GetBuffer(100),100,csFilename);
strncpy(g_struLocalParam.chPictureSavePath,(LPCTSTR)buf,sizeof(g_struLocalParam.chPictureSavePath));
GetPrivateProfileString("ClientRecordPath","chClientRecordPath","",buf.GetBuffer(100),100,csFilename);
strncpy(g_struLocalParam.chClientRecordPath,(LPCTSTR)buf,sizeof(g_struLocalParam.chClientRecordPath));
调试时发现buf根本就没有取到值,还是空的
------解决方案--------------------
换用这个函数试试看:
CString buf="";
GetPrivateProfileString("PreviewBlock","bPreviewBlock","",buf.GetBufferSetLength(100),100,csFilename);
之后别忘了buf.Release();
------解决方案--------------------
你前面两个应该用
GetPrivateProfileInt 读比较好
后面的里面还是传 char szBuf[100]比较好些,我一般这样用的,没出过问题
还有就是注意你的 csFilename 是否对了
------解决方案--------------------
MSDN上有详细的参考例子 分析一下看看
我在硬盘下的配置文件如下:
[PreviewBlock]
bPreviewBlock=0
[BFrameNum]
dwBFrameNum=0
[DownLoadPath]
chDownLoadPath=c:\DownLoad
[PictureSavePath]
chPictureSavePath=c:\Picture
[ClientRecordPath]
chClientRecordPath=c:\;
我读的时候是这样写的
CString buf="";
GetPrivateProfileString("PreviewBlock","bPreviewBlock","",buf.GetBuffer(100),100,csFilename);
GetPrivateProfileString("BFrameNum","dwBFrameNum","",buf.GetBuffer(100),100,csFilename);
g_struLocalParam.dwBFrameNum = atoi(buf);
GetPrivateProfileString("DownLoadPath","chDownLoadPath","",buf.GetBuffer(100),100,csFilename);
strncpy(g_struLocalParam.chDownLoadPath,(LPCTSTR)buf,sizeof(g_struLocalParam.chDownLoadPath));
GetPrivateProfileString("PictureSavePath","chPictureSavePath","",buf.GetBuffer(100),100,csFilename);
strncpy(g_struLocalParam.chPictureSavePath,(LPCTSTR)buf,sizeof(g_struLocalParam.chPictureSavePath));
GetPrivateProfileString("ClientRecordPath","chClientRecordPath","",buf.GetBuffer(100),100,csFilename);
strncpy(g_struLocalParam.chClientRecordPath,(LPCTSTR)buf,sizeof(g_struLocalParam.chClientRecordPath));
调试时发现buf根本就没有取到值,还是空的
------解决方案--------------------
换用这个函数试试看:
CString buf="";
GetPrivateProfileString("PreviewBlock","bPreviewBlock","",buf.GetBufferSetLength(100),100,csFilename);
之后别忘了buf.Release();
------解决方案--------------------
你前面两个应该用
GetPrivateProfileInt 读比较好
后面的里面还是传 char szBuf[100]比较好些,我一般这样用的,没出过问题
还有就是注意你的 csFilename 是否对了
------解决方案--------------------
MSDN上有详细的参考例子 分析一下看看
- C/C++ code
#include <windows.h> #include <tchar.h> #include <stdio.h> int main() { TCHAR inBuf[80]; HKEY hKey1, hKey2; DWORD dwDisposition; LONG lRetCode; TCHAR szData[] = TEXT("USR:App Name\\Section1"); // Create the .ini file key. lRetCode = RegCreateKeyEx ( HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\" "IniFileMapping\\appname.ini"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey1, &dwDisposition); if (lRetCode != ERROR_SUCCESS) { printf ("Error in creating appname.ini key (%d).\n", lRetCode); return (0) ; } // Set a section value lRetCode = RegSetValueEx ( hKey1, TEXT("Section1"), 0, REG_SZ, (BYTE *)szData, sizeof(szData)); if (lRetCode != ERROR_SUCCESS) { printf ("Error in setting Section1 value\n"); // Close the key lRetCode = RegCloseKey( hKey1 ); if( lRetCode != ERROR_SUCCESS ) { printf("Error in RegCloseKey (%d).\n", lRetCode); return (0) ; } } // Create an App Name key lRetCode = RegCreateKeyEx ( HKEY_CURRENT_USER, TEXT("App Name"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey2, &dwDisposition); if (lRetCode != ERROR_SUCCESS) { printf ("Error in creating App Name key (%d).\n", lRetCode); // Close the key lRetCode = RegCloseKey( hKey2 ); if( lRetCode != ERROR_SUCCESS ) { printf("Error in RegCloseKey (%d).\n", lRetCode); return (0) ; } } // Force the system to read the mapping into shared memory // so that future invocations of the application will see it // without the user having to reboot the system WritePrivateProfileStringW( NULL, NULL, NULL, L"appname.ini" ); // Write some added values WritePrivateProfileString (TEXT("Section1"), TEXT("FirstKey"), TEXT("It all worked out OK."), TEXT("appname.ini")); WritePrivateProfileString (TEXT("Section1"), TEXT("SecondKey"), TEXT("By golly, it works!"), TEXT("appname.ini")); WritePrivateProfileString (TEXT("Section1"), TEXT("ThirdKey"), TEXT("Another test..."), TEXT("appname.ini")); // Test GetPrivateProfileString (TEXT("Section1"), TEXT("FirstKey"), TEXT("Error: GPPS failed"), inBuf, 80, TEXT("appname.ini")); _tprintf (TEXT("Key: %s\n"), inBuf); // Close the keys lRetCode = RegCloseKey( hKey1 ); if( lRetCode != ERROR_SUCCESS ) { printf("Error in RegCloseKey (%d).\n", lRetCode); return(0); } lRetCode = RegCloseKey( hKey2 ); if( lRetCode != ERROR_SUCCESS ) { printf("Error in RegCloseKey (%d).\n", lRetCode); return(0); } return(1); }