文件读写方法小记

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值