VC++讀取檔案的最後一行
FILE* fp = fopen("Datalog.dat", "a+");
char Vall[201];
while(NULL != fgets(Vall, 200, fp)) //用fgets是因為fscanf(,%s,); 遇到空格會停止。每一行都有換行符,讀到檔案尾則不再迴圈/
{fgets(Vall, 200, fp);
}
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 Left( int nCount ) const; //從左邊1開始獲取前
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