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();
}