:npos) 331 { 332 return string::npos; 333 } 334 pos = strLine.find('\"',++pos); 335 if (pos == string::npos) 336 { 337 return string::npos; 338 } 339 size_t pos1 = ++pos; 340 pos = strLine.rfind('\"'); 341 if (pos == string::npos) 342 { 343 return string::npos; 344 } 345 strVal = strLine.substr(pos1,pos-pos1); 346 return pos1; 347} 348/**//// 使用字节数判断是否到达文件末尾 349bool CRCVersion::eof() const 350{ 351 assert(INVALID_HANDLE_VALUE != m_hFile); 352 DWORD dwCurLow = SetFilePointer(m_hFile,0,NULL,FILE_CURRENT); 353 DWORD dwEndLow = SetFilePointer(m_hFile,0,NULL,FILE_END); 354 bool bEof = (dwCurLow == dwEndLow); 355 SetFilePointer(m_hFile,dwCurLow,NULL,FILE_BEGIN); 356 return bEof; 357} 358/**//// 获取每行的文本 359void CRCVersion::getline(string& strLine) const 360{ 361 assert(UNKNOW != m_nCharEncodeType); 362 363 char buf[2] = {'\0'}; wstring wstrLine; 364 for (DWORD dwRead,dwReaded;;) 365 { 366 dwRead = (ANSI == m_nCharEncodeType 1 : 2); 367 if (!ReadFile(m_hFile,buf,dwRead,&dwReaded,NULL)||0==dwReaded) 368 { 369 break; 370 } 371 if (1==dwReaded) 372 { 373 strLine += buf[0]; 374 if (buf[0]=='\r') 375 { 376 if (!ReadFile(m_hFile,&buf[1],1,&dwReaded,NULL)||0==dwReaded) 377 { 378 break; 379 } 380 if (buf[1]=='\n') 381 { 382 strLine += buf[1]; 383 } 384 else 385 { 386 SetFilePointer(m_hFile,-1,NULL,FILE_CURRENT); 387 } 388 break; 389 } 390 else if (buf[0]=='\n') 391 { 392 break; 393 } 394 } 395 else 396 { 397 if ((is_big_endian() ^ (UNICODE_BIG==m_nCharEncodeType))) 398 { 399 swap(buf[0],buf[1]); 400 } 401 wchar_t wch; memcpy(&wch,buf,sizeof(wchar_t)); 402 wstrLine += wch; 403 if (wch==L'\r') 404 { 405 if (!ReadFile(m_hFile,buf,2,&dwReaded,NULL)||0==dwReaded) 406 { 407 break; 408 } 409 if ((is_big_endian() ^ (UNICODE_BIG==m_nCharEncodeType))) 410 { 411 swap(buf[0],buf[1]); 412 } 413 memcpy(&wch,buf,sizeof(wchar_t)); 414 if (wch==L'\n') 415 { 416 wstrLine += wch; 417 } 418 else 419 { 420 SetFilePointer(m_hFile,-2,NULL,FILE_CURRENT); 421 } 422 break; 423 } 424 else if (wch==L'\n') 425 { 426 break; 427 } 428 } 429 } 430 if (ANSI != m_nCharEncodeType) 431 { 432 wstr2astr(wstrLine.c_str(),strLine); 433 TRACE4(L"%s",wstrLine.c_str()); 434 } 435 else 436 { 437 TRACE4("%s",strLine.c_str()); 438 } 439} 440 441/**/////////////////////////////////////////////////////////////////////////// 442const tstring& CRCVersion::GetCompanyName() const 443{ 444 return m_tstrCompanyName; 445} 446 447const tstring& CRCVersion::GetProductName() const 448{ 449 return m_tstrProductName; 450} 451 452 |