您的位置:首页 > 其它

文件读写方法小记

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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: