文件读写方法小记
2011-12-07 10:14
253 查看
1 读写TXT文件,写入和输出必须统一格式
CStdioFile myFile, File; if(myFile.Open(CBApp::getCurrModulePath()+_T("filename.txt"), CFile::modeRead)) { //读取 myFile.ReadString(str); myFile.Close(); } else { //创建 File.Open(CBApp::getCurrModulePath()+_T("filename.txt"), CFile::modeWrite | CFile::modeCreate); File.WriteString(sFileName); File.Close(); } //写入 File.Open(CBApp::getCurrModulePath()+_T("filename.txt"), CFile::modeWrite ); File.WriteString(sFileName); File.Close();
参考资料:
MFC主要读写文件的类是CFile,而CStdioFile类是派生自CFile类的,主要增加了一个按行的方式读取/写入文件每行字符串的功能!别的地方没咋研究!
//CFile读取所有文件到缓冲区: CFile file; char buffer[1024]; if(!file.Open("c:\\aaa.txt",CFile::modeRead))return; //打开aaa这个文件,打开形式为读取 file.Read(buffer,1024); //将文件的内容从开始,读1024到缓冲区(如果想读取不同地方的数据则需要设置游标函数Seek,SeekToBegin,SeekToEnd..) file.Close(); //CFile写内容到文件 CFile file; char buffer[1024] = "在此添加要写入文件的字符串!"; if(!file.Open("c:\\aaa.txt",CFile::Create | CFile::Write))return; //打开aaa这个文件,打开形式为(无此文件则新建)写入 file.Write(buffer,strlen(buffer)); file.Close();
2 创建路径上最后的一个文件夹
CreateDirectory(strTempPath, NULL); // 创建路径上所有的文件夹 SHCreateDirectoryEx(NULL, strTempPath, NULL); 例子: CString strFolderPath="c:\\test" // 判断路径是否存在 if (!PathIsDirectory(m_strFolderPath) ) { CString strMsg; strMsg.Format ("指定路径\"%s\"不存在,是否创建?", m_strFolderPath); if (AfxMessageBox(strMsg, MB_YESNO) == IDYES) { if (!CreateDirectory(m_strFolderPath, NULL ) ) { strMsg.Format ("创建路径\"%s\"失败!是否继续?", m_strFolderPath); if (AfxMessageBox(strMsg, MB_YESNO) == IDYES) return; } } }
3 如何在MFC中读写配置文件?
loadIniFile(m_dwPort, m_dwFrequency, m_checkBit, m_nobits, m_stopbit, m_sFilePath);
saveIniFile(m_dwPort, m_dwFrequency, m_checkBit, m_nobits, m_stopbit, m_sFilePath);void CBPortSettingDlg::loadIniFile(DWORD &dwPort, DWORD &dwFrequency, BYTE &checkBits, BYTE &noBits, BYTE &stopBit, CString sFileName) { dwPort = GetPrivateProfileInt(_T("Portinfo"), _T("Port"), 1, sFileName); dwFrequency = GetPrivateProfileInt(_T("Portinfo"), _T("Frequency"), 57600, sFileName); checkBits = GetPrivateProfileInt(_T("Portinfo"), _T("Checkbit"), 0, sFileName); noBits = GetPrivateProfileInt(_T("Portinfo"), _T("Nobit"), 8, sFileName); stopBit = GetPrivateProfileInt(_T("Portinfo"), _T("Stopbit"), 0, sFileName); } void CBPortSettingDlg::saveIniFile(DWORD dwPort, DWORD dwFrequency, BYTE checkBits, BYTE noBits, BYTE stopBit, CString sFileName) { CString strTemp; strTemp.Format(_T("%d"), dwPort); ::WritePrivateProfileString(_T("Portinfo"), _T("Port"), strTemp, sFileName);//保存端口号 strTemp.Format(_T("%d"), dwFrequency); ::WritePrivateProfileString(_T("Portinfo"), _T("Frequency"),strTemp, sFileName);//保存波特率 strTemp.Format(_T("%d"),checkBits); ::WritePrivateProfileString(_T("Portinfo"), _T("Checkbit"),strTemp, sFileName);//保存校验位 strTemp.Format(_T("%d"),noBits); ::WritePrivateProfileString(_T("Portinfo"), _T("Nobit"),strTemp, sFileName);//保存数据位 strTemp.Format(_T("%d"), stopBit); ::WritePrivateProfileString(_T("Portinfo"), _T("Stopbit"), strTemp, sFileName);//保存停止位 }
例子2:
void loadInFile(); void CBDataResourceDlg::loadInFile()//SQL身份验证下读取配置文件 { CString sDataServer = _T(""); CString sUid = _T(""); CString strTemp =_T(""); int sPwd = 0; int MAX_LENGTH = 100; int MAX_LENGTH2 = 100; //读取配置文件 GetPrivateProfileString(_T("Traninfo"), _T("SERVER"), _T("ZHANGYIRUI"), sDataServer.GetBuffer(MAX_LENGTH), MAX_LENGTH, _T(".\\Translate.ini")); GetPrivateProfileString(_T("Traninfo"), _T("UID"), _T("sa"), sUid.GetBuffer(MAX_LENGTH2), MAX_LENGTH2, _T(".\\Translate.ini")); sPwd = GetPrivateProfileInt(_T("Traninfo"), _T("PWD"), 123456, _T(".\\Translate.ini")); strTemp.Format(_T("Provider=SQLOLEDB.1;Password=%d;Persist Security Info=True;User ID=%s;Initial Catalog=user_translate;Data Source=%s"), sPwd, sUid, sDataServer); m_AdoDC.SetConnectionString(strTemp);//设置连接语句 m_dataGrid.SetRefDataSource(m_AdoDC.GetControlUnknown());//刷新数据源 strTemp.Format("%d", sPwd);//生成配置语句 ::WritePrivateProfileString(_T("Traninfo"), _T("SERVER"), sDataServer, _T(".\\Translate.ini")); ::WritePrivateProfileString(_T("Traninfo"), _T("UID"), sUid, _T(".\\Translate.ini")); ::WritePrivateProfileString(_T("Traninfo"), _T("PWD"), strTemp, _T(".\\Translate.ini")); sDataServer.ReleaseBuffer(); sUid.ReleaseBuffer(); }
例子3:
CString CBDoc::GetFileName() { CString sFileName = GetTitle(); CFile readFile, writeFile; int iLen; //读取txt文件 if (readFile.Open(CBApp::getCurrModulePath() + _T("filename.txt"), CFile::modeRead)) { //ansi to unicode int iFileLenth = (int)readFile.GetLength(); char* cRead = new char[iFileLenth]; readFile.Read(cRead, iFileLenth); readFile.Close(); //预转换,得到所需空间的大小 iLen = ::MultiByteToWideChar(CP_ACP, NULL, cRead, iFileLenth, NULL, 0); wchar_t* cTemp = new wchar_t[iLen + 1]; //留一个位置给'\0' ::MultiByteToWideChar(CP_ACP, NULL, cRead, iFileLenth, cTemp, iLen);//转换 cTemp[iLen] = '\0'; sFileName= cTemp; delete cRead; delete cTemp; } CString sNum, sName = sFileName; int iNum, iIndex; iIndex = sFileName.Find('_'); sNum = sFileName.Mid(iIndex + 1); iNum = _wtoi(sNum) + 1; if(iNum < 0) iNum = 1; if (iIndex >= 0) sName = sFileName.Mid(0, iIndex); sFileName.Format(_T("%s_%d"), sName, iNum); //创建或写入txt文件 writeFile.Open(CBApp::getCurrModulePath()+_T("filename.txt"), CFile::modeWrite | CFile::modeCreate ); LPTSTR pTemp = sFileName.GetBuffer(); //unicode to ansi iLen = ::WideCharToMultiByte(CP_ACP, NULL, pTemp, (int)wcslen(pTemp), NULL, 0, NULL, NULL); char* cWrite = new char[iLen+1]; ::WideCharToMultiByte(CP_ACP, NULL, pTemp, (int)wcslen(pTemp), cWrite, iLen, NULL, NULL); cWrite[iLen] = '\0'; writeFile.Write(cWrite, iLen); writeFile.Close(); delete cWrite; return sFileName; }
4 保存数据到XLS文件
//将数据保存到文件 void CBView::saveAsFile() { CFileDialog fileDlg(FALSE); //数据保存对话框 fileDlg.m_ofn.lpstrTitle = _T("数据保存到文件"); fileDlg.m_ofn.lpstrFilter = _T("XLS Files(*.xls)\0*.xls\0All Files(*.*)\0*.*\0\0"); fileDlg.m_ofn.lpstrDefExt= _T("xls"); if (IDOK != fileDlg.DoModal()) return; //写入到XLS文件 CStdioFile speedfile(fileDlg.GetFileName(), CFile::modeCreate | CFile::modeWrite); speedfile.WriteString(_T("Pos\tStartX\tStartY\tEndX\tEndY\tLength\n");); speedfile.Close(); }
相关文章推荐
- 文件读写方法小记2
- 字符串常用方法—文件内容读写
- C++ 之 Excel文件读写 之 简便方法
- C#读写txt文件的两种方法介绍
- Android 读写文件方法汇总
- Java 读写json格式的文件方法详解
- Linux内核中读写文件数据的方法
- java 读写文件[多种方法]
- java文件读写方法
- CFile和CStdioFile的文件读写使用方法
- 小记:利用递归调用循环寻找MP3文件的方法。
- CFile和CStdioFile的文件读写使用方法
- Matlab文件读写的几种方法
- Android读写文件正确实行方法介绍
- android 网络下载文件 和 读写sdcard 方法
- 关于共享读写文件的方法
- 【转】 Linux内核中读写文件数据的方法--不错
- Oracle 读写文件方法
- 14-OC中NSDictionary常用方法,遍历,读写文件
- C#读写txt文件的2种方法