VC++读取文件的最后一行

时间:2022-02-17 11:54:34

FILE* fp = fopen("Datalog.dat", "a+");

char Vall[201];

while(NULL != fgets(Vall, 200, fp))                                         //用fgets是因为fscanf(,%s,); 遇到空格会停止。每一行都有换行符,读到文件尾则不再循环/

{
fgets(Vall, 200, fp); //虽然每次最多读取200个,其实只读取到"\n"就停止了,正合我心意

}

char delims[] = "#";

vPath = strtok(Vall, delims );//拆分字符串。“#”为分隔符/
vTaskName = strtok( NULL, delims );

但是问题出现了。另外一个窗口打开后,fgets()和openfile.ReadString()都执行不成功,读取到第一条数据后,就退出了循环。

也就是说,无法做到自动读取一行;然后尝试令一些函数:

 

HANDLE pfile;
pfile=::CreateFile("D:\\vc\\DataList.dat",GENERIC_READ,//指定读控制,可以从对象中读取数据(指针将可以移动)。 /0,//指定对象的共享模式。如果dwShareMode==0,表示是互斥使用的。/NULL,//参数为NULL,句柄就不能被子进程继承。/OPEN_EXISTING,//打开文件(如果不存在就返回失败)/FILE_ATTRIBUTE_NORMAL,//文件没有其他属性设置,此属性只能单独使用才合法。/NULL);//用这个函数比OpenFile好|FILE_FLAG_DELETE_ON_CLOSEif(pfile==INVALID_HANDLE_VALUE) { AfxMessageBox("打开文件失败"); CloseHandle(pfile);//一定注意在函数退出之前对句柄进行释放。 return; } DWORD filesize=GetFileSize(pfile,NULL); fflush(stdin);char* buffer=new char[filesize+1];//最后一位为'/0',C-Style字符串的结束符。 DWORD readsize; ReadFile(pfile,buffer,filesize,&readsize,NULL); buffer[filesize]=0; AfxMessageBox(buffer);

函数执行成功了,也不与窗口冲突,只是获得了一大串字符后,分割每一行、每一块,又成了新问题。

MFC字符串类有Find正向查找,ReversFind反向查找,Left左截取,Right右截取,Mid任意位置截取函数,配合使用就可以实现

CString Left( int nCount ) const;                   //从左边1开始获取前 nCount 个字符

CString Mid( int nFirst ) const;                      //从左边第 nCount+1 个字符开始,获取后面所有的字符

CString Mid( int nFirst, int nCount ) const;    //从左边第 nFirst+1 个字符开始,获取后面 nCount 个字符

CString Right( int nCount ) const;                  //从右边1开始获取从右向左前 nCount 个字符

例1:CString str = _T("taohongmin");
int pos = str.ReverseFind('m'); //此时pos = 7;
例2:CString s( "abcabc" );
s.ReverseFind( 'b' ) == 4 // true;
 

例:

 CString a,b;
 a = "123456789";


 b = a.Left(4);   //值为:1234
 b = a.Mid(3);    //值为:456789
 b = a.Mid(2, 4); //值为:3456
 b = a.Right(4);  //值为:6789