头文件
#pragma once
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <functional>
#include <algorithm>
class CReadTxtClass
{
public:
CReadTxtClass(void);
virtual ~CReadTxtClass(void);
public:
CString m_fileName;
public:
long GetTxtRow();
BOOL GetTxtFilePath(CString strfile);
BOOL ReadTxtData(int stratReadLine, int readCount, std::vector<std::string> &strList);
};
cpp实现
#include "StdAfx.h"
#include "ReadTxtClass.h"
CReadTxtClass::CReadTxtClass(void)
{
}
CReadTxtClass::~CReadTxtClass(void)
{
}
long CReadTxtClass::GetTxtRow()
{
if (m_fileName.IsEmpty())
{
return FALSE;
}
long irow = 0;
std::string str;
std::ifstream infile;
infile.open(m_fileName);
while(getline(infile, str))
{
++irow;
}
infile.close();
return irow-1;
}
BOOL CReadTxtClass::GetTxtFilePath(CString strfile)
{
if (strfile.IsEmpty())
{
return FALSE;
}
m_fileName = strfile;
if (m_fileName.IsEmpty())
{
return FALSE;
}
return TRUE;
}
BOOL CReadTxtClass::ReadTxtData(int stratReadLine, int readCount, std::vector<std::string> &strList)
{
if (m_fileName.IsEmpty() || readCount <= 0)
{
return FALSE;
}
strList.clear();
std::string str;
std::ifstream infile;
infile.open(m_fileName);
int countnum = 0;
int hadReadnum = 0;
while(getline(infile, str))
{
if (countnum >= stratReadLine)
{
if (hadReadnum >= readCount)
{
break;
}
++hadReadnum;
strList.push_back(str);
}
++countnum;
}
if (strList.size() != readCount)
{
infile.close();
return FALSE;
}
infile.close();
return TRUE;
}
写txt可将该部分封装进该类
CStdioFile myfile;
if (!myfile.Open(pTmp->m_fileName, CFile::modeCreate| CFile::modeReadWrite))
{
AfxMessageBox(L"Error");
return ;
}
//解决乱码问题
char * loa = _strdup(setlocale(LC_CTYPE,NULL));
setlocale(LC_CTYPE,"chs");
//写一行数据
CString strHead;
myfile.WriteString(strHead + '\n');
myfile.Close();
setlocale(LC_CTYPE,loa);
free(loa);