用CFile,CArchive等都可以保存, 做一个按钮保存,另一个装入,即可。
或者在对话框退出时自动保存,在初始化时自动装入。 无需按行保存,就用一个变量即可
例如答扰:对话框开启时写:
BOOL CTest1Dlg::OnInitDialog()
{
//系统自动产生的代码省略。。。
// TODO: Add extra initialization here
CFile mFile
腊盯 if(mFile.Open("user.txt",CFile::modeRead))
{
CArchive ar(&mFile,CArchive::load)
ar>>m_Name>>m_Age
ar.Close()
UpdateData(FALSE)
}
return TRUE
}
退出时:
void CTest1Dlg::OnExit()
{
// TODO: Add your control notification handler code here
CFile mFile
if(mFile.Open("user.txt",CFile::modeWrite|CFile::modeCreate))
{
CArchive ar(&mFile,CArchive::store)
UpdateData(TRUE)
ar<<m_Name<<m_Age
ar.Close()
}
this->OnOK()
}
补充:微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和轮举和组件的封装类。
MFC下管理动态长度数据,可以使用指针链表或模板宽改团类CArray,前者需要自己做一个简单的维护类,后者效率稍低。不过对你的程序,不建议使用动态数组,你完全可以用malloc建立一个预估长度足够的内存空间歼散,每次加入数据的时候,如果判断空间用尽,就realloc动态的增加一倍空间即可,这样效率是最高的,而且合理的预估长度也不会造成空间的浪费。(一般建议预估空间大小为足够多数情况使用,而2~3次倍增足够绝大多数情况使用即可)
数据推荐保存为app类的成员变量,这样在MFC程序中就是全局慎橘的,可以在框架内通过AfxGetApp()获取app类指针直接访问。
可以用windows api写入ini, 然后用windows api读取。WritePrivateProfileStruc
GetPrivateProfileStruct
这两个很方便。
http://msdn.microsoft.com/en-us/library/ms725502(VS.85).aspx
用API写INI文件的函数有
BOOL WritePrivateProfileString(
LPCTSTR lpAppName, // 节名
LPCTSTR lpKeyName, // 键名
LPCTSTR lpString, // 添加的字符串
LPCTSTR lpFileName // Ini文件名
)
BOOL WritePrivateProfileStruct(
LPCTSTR lpszSection, // pointer to section name
LPCTSTR lpszKey, // pointer to key name
LPVOID lpStruct, // 要写入的数据拿郑逗缓冲区
UINT uSizeStruct, // 缓冲区的大小
LPCTSTR szFile // pointer to initialization filename
)
BOOL WritePrivateProfileSection(
LPCTSTR lpAppName, // pointer to string with section name
LPCTSTR lpString, // 写入的字符串
LPCTSTR lpFileName // pointer to string with filename
)
用API读INI文件的消卖函数丛铅有
DWORD GetPrivateProfileString(
LPCTSTR lpAppName, // points to section name
LPCTSTR lpKeyName, // points to key name
LPCTSTR lpDefault, // 默认字符串 ,如果没有则返回该值
LPTSTR lpReturnedString, // 返回的字符串
DWORD nSize, // 返回字符串的大小
LPCTSTR lpFileName // points to initialization filename
)
DWORD GetPrivateProfileSection(
LPCTSTR lpAppName, // address of section name
LPTSTR lpReturnedString, // address of return buffer
DWORD nSize, // size of return buffer
LPCTSTR lpFileName // address of initialization filename
)
UINT GetPrivateProfileInt(
LPCTSTR lpAppName, // address of section name
LPCTSTR lpKeyName, // address of key name
INT nDefault, // return value if key name is not found
LPCTSTR lpFileName // address of initialization filename
)
BOOL GetPrivateProfileStruct(
LPCTSTR lpszSection, // address of section name
LPCTSTR lpszKey, // address of key name
LPVOID lpStruct, // address of return buffer
UINT uSizeStruct, // size of return buffer
LPCTSTR szFile // address of initialization filename
)
DWORD GetPrivateProfileSectionNames(
LPTSTR lpszReturnBuffer, // address of return buffer
DWORD nSize, // size of return buffer
LPCTSTR lpFileName // address of initialization filename
)
当然还有如WriteProfileString,WriteProfileSection,WriteProfileSturct, GetProfileString,GetProfileStruct,GetProfileSectionNames,GetProfileInt,GetProfileSection但这些只对Win.ini有效
下面我们来学习它们的用法
WritePrivateProfileString函数是向ini文件中写入字符串,如
WritePrivateProfileString(Pchar('类型'),Pchar('API'),Pchar('API 真好!'),Pchar('c:\example.ini'))
如果第二个参数是nil,那么该 *** 作将删除该节
如果第三个参数为nil,那么该 *** 作将删除该节中的所有键
如果在指定的文件中没有路径,那么它将在系统的目录寻找文件,如果不存在则建立
WritePrivateProfileSection是向文件中写入一整个键,其它键的格式为key = value,如
WritePrivateProfileSection(Pchar('类型'),Pchar('其它=123'),Pchar('c:\example.ini'))
注意,该 *** 作将删除该节中的所有键后在进行本次的写入
WritePrivateProfileStruct是向文件中写入一个结构,如
type
TPerson = record
Name:string
Age:integer
end
var
Per:TPerson
WritePrivateProfileStruct(Pchar('类型'),Pchar('结构'),@Per,Sizeof(Per),Pchar('C:\example.ini'))
GetPrivateProfileString是从文件中读出一个指定键的字符串,如果没有找到,则返回默认值
GetPrivateProfileString(Pchar(‘类型'),Pchar('API'),Pchar('no value'),Str1,21,Pchar('c:\example.ini'))
GetPrivateProfileSection是从文件中读出一整个键
GetprivateProfileSection('类型',str1,200,'c:\example.ini')
GetPrivateProfileInt是从文件中读出指定键的整型值,如果没找到或不是整型的值,则返回默认值,如果返回值小于0,则返回0,如
i:=GetPrivateProfileInt(Pchar('类型'),Pchar('整型'),i,Pchar('C:\example.ini'))
showMessage(inttostr(i))
GetPrivateProfileStruct从文件中读出指定键的结构值,如
type
TPerson = record
Name:string
Age:integer
end
var
Buffer:TPerson
GetPrivateProfileStruct(Pchar('类型'),Pchar('结构'),@Buffer,Sizeof(Per),Pchar('C:\example.ini'))
GetPrivateProfileSectionNames是从文件中读出所有节的名称,该函数返回读入缓冲区的字符数,如
count:=GetPrivateProfileSectionNames(Str3,200,Pchar('c:\example.ini'))
ShowMessage(Str3)
此处显示的只是第一个节的名称,如果要显示第二个字符的名称则要用到下面这句
showmessage(str3+5)
这句不用多解释吧?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)