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_CLOSE
if(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