MFC的怎么进行文件保存

MFC的怎么进行文件保存,第1张

用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)

这句不用多解释吧?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12432572.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存