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
CString
CString
CString
例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