文件读取成功
对于CString类 这是没法读取的因为无法确定它的大小, 所以一定要避免使用CString存取字符串
对于习惯了vc6.0 在使用vs时,难免会遇到多字节码与统一码转换的困扰
特别是在对文件读写时,这时我们不要去纠结这个,转换肯定会出问题的。
但是微软肯定会想到,所以设计了使wchar_t与char对应 为了移植不出现问题
我建议使用TCHAR 对于字符串建议用_T而不要用L,养成一个好的习惯。
定义的结构体
struct SUser { TCHAR sName[20]; TCHAR sPass[10]; TCHAR sPrior[10]; };
退出时写入文件 void CPriorDlg::OnDestroy() { CDialog::OnDestroy(); SUser u; memset(u.sName,_T('\0'),sizeof(u.sName)); memset(u.sPass,_T('\0'),sizeof(u.sPass)); memset(u.sPrior,_T('\0'),sizeof(u.sPrior)); CFile file; if(!file.Open(_T("./User.txt"),CFile::modeCreate|CFile::modeWrite)) return; CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_PRIOR_LIST); int i = 0,nCount = pList->GetItemCount(); while(i < nCount) { pList->GetItemText(i,0,u.sName,sizeof(u.sName)); pList->GetItemText(i,1,u.sPass,sizeof(u.sPass)); pList->GetItemText(i,2,u.sPrior,sizeof(u.sPrior)); file.Write(&u,sizeof(u)); i++; } file.Close(); }
启动时读入文件
BOOL CPriorDlg::OnInitDialog() { CDialog::OnInitDialog(); CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_PRIOR_LIST); pList->InsertColumn(0,_T("用户名"),0,150); pList->InsertColumn(1,_T("密码"),0,150); pList->InsertColumn(2,_T("权限"),0,120); CComboBox* pCombo = (CComboBox*)GetDlgItem(IDC_PRIOR_COMBO); pCombo->AddString(_T("普通")); pCombo->AddString(_T("高级")); pCombo->SetCurSel(0); ReadUsers(pList); return TRUE; } void CPriorDlg::ReadUsers(CListCtrl* pList) { CFile file; SUser u; //file.Open(L"./User.dat",CFile::modeRead); if(!file.Open(_T("./User.txt"),CFile::modeRead)) { AfxMessageBox(_T("failed open file User.dat")); return; } int i = 0; while(file.Read(&u,sizeof(u)) > 0) { CString str; str.Format(_T("用户名:%s 密码:%s 权限: %s"),u.sName,u.sPass,u.sPrior); AfxMessageBox(str); pList->InsertItem(i,u.sName); pList->SetItemText(i,1,u.sPass); pList->SetItemText(i,2,u.sPrior); i++; } file.Close(); } |
|