用CFile 读取文本文件的第一行

mickeyhao85 2008-12-25 01:06:59
RT

不能用CStdioFile类中的ReadString()

就用CFile file;
file.read.........

怎样实现读取文本文件第一行到CString中

多谢高手指定
最好给代码!
...全文
746 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ivan_08 2008-12-26
  • 打赏
  • 举报
回复
顺道学习一下
wutaihua 2008-12-26
  • 打赏
  • 举报
回复
我给多了,楼主只需要第一行的,我给了所有整个文件的分割,不好意思,没看仔细
wutaihua 2008-12-26
  • 打赏
  • 举报
回复
建议楼主申请一个64K大小的buffer,然后用CFile读取64K,用AfxExtractSubString将buffer分割,当到数组最后的时候,要记录发现最后一个文件结束符"\r\n",然后下次读取文件的时候,要从这个"\r\n"开始,代码我帮你写了下,但是细节还是需要你调试下


#define MAX_BUF 64*1024
void CTestDlg::AnalysisFile()
{
char buf[MAX_BUF];
ULONGLONG ullPos;
ULONGLONG ullFileLen;
int nBufPos;
int nRead;

memset(buf, 0, sizeof(buf));
ullPos = 0;
nBufPos = 0;

CFile file;
file.Open("c:\\001.txt", CFile::modeRead);
ullFileLen = file.GetLength();

while((ullPos = file.GetPosition()) < ullFileLen)
{
nRead = file.Read(buf, MAX_BUF); //读取的字节大小,一般情况下应该是MAX_BUF,文件结尾就不足MAX_BUF
while(nRead > 0)
{
nBufPos = AnalysisBuffer(buf, nRead);
if(MAX_BUF - nBufPos > 0)
{
file.Seek(nBufPos - MAX_BUF, CFile::current);//看看到底是移动多少,细节
}
}

nBufPos = 0;


}
}

int CTestDlg::AnalysisBuffer(char*buffer, UINT nReadSize)
{
int nSubCount = 0;
CString rString;
CString rSubString;//用来接受子字符串,就是读取的一行
rString = buffer;
while(AfxExtractSubString(rSubString,rString.GetBuffer(0), nSubCount++,'\r\n'))
{
//....
//rSubString就是循环读出每一行的;
}

return rString.ReverseFind('\r\n');
}


楼主再调试下,应该可以了
zw0558 2008-12-25
  • 打赏
  • 举报
回复
CFile不支持读字符串,可以先把数据读到缓冲区里,然后扫描检查换行符,将换行符改为0,然后再赋给CString。如果不考虑效率,也可以每次读一个字符。
qhluo02 2008-12-25
  • 打赏
  • 举报
回复
CString str(_T(""));
BYTE cOne='\0';
do
{
file.Read(&cOne,1);
str+=cOne;
}while(cOne!='\n');



str.TrimRight('\n');
str.TrimRight('\r');
还在查 2008-12-25
  • 打赏
  • 举报
回复
比较笨的办法,还是ReadString好,省心
还在查 2008-12-25
  • 打赏
  • 举报
回复
char g_in[1024];
CFile file_open;
g_in[0]='\0';
file_open.Open("c:\\result.txt",CFile::modeRead);
CString m_sss,m_data;
int mid=0;

int file_length=file_open.GetLength();
file_open.Read(g_in,file_length);

m_sss=CString(g_in);
mid=m_sss.Find("\r\n",0);
m_data=m_sss.Mid(0,mid);
youngwolf 2008-12-25
  • 打赏
  • 举报
回复
CArchive能不能用,它的ReadString方法可以读取一行。
llqpp 2008-12-25
  • 打赏
  • 举报
回复
用CStdioFile吧,ReadString()...
路人乙2019 2008-12-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cnzdgs 的回复:]
CFile不支持读字符串,可以先把数据读到缓冲区里,然后扫描检查换行符,将换行符改为0,然后再赋给CString。如果不考虑效率,也可以每次读一个字符。
[/Quote]只能这样了。
cnzdgs 2008-12-25
  • 打赏
  • 举报
回复
CFile不支持读字符串,可以先把数据读到缓冲区里,然后扫描检查换行符,将换行符改为0,然后再赋给CString。如果不考虑效率,也可以每次读一个字符。
skylu80 2008-12-25
  • 打赏
  • 举报
回复
以二进制方式一个字节一个字节读,当匹配当'\r',停止读,该字符串就是你想的

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧