From d42932deb4fa1341e21a89cd51095727bd7d375b Mon Sep 17 00:00:00 2001 From: sauron Date: Tue, 2 Sep 2025 17:24:26 +0900 Subject: [PATCH] commit 2025-09-02 17:24 delete fun ReadFile~(), SearchFile~() etc in ZCppMain/ZMainHeadEx.H --- ZCppMain/ZtCStringEx.H | 1074 ++---------------------------------------------- 1 file changed, 24 insertions(+), 1050 deletions(-) diff --git a/ZCppMain/ZtCStringEx.H b/ZCppMain/ZtCStringEx.H index 7281c9a..d037621 100644 --- a/ZCppMain/ZtCStringEx.H +++ b/ZCppMain/ZtCStringEx.H @@ -5095,1029 +5095,11 @@ namespace ZNsMain ZCStringBase& AddPerChunk(TypeLength AL_ChunkSize, TypeCharC* APC_AddChar)*/ - bool LoadFile /*##############################################################*/ - ( - TypeCharC* APC_FileName , bool AB_DoAppend=true, - TypeLength AL_AddAllocSize=0, TypeLength AL_LoadSize=0 - ) - /*#############################################################################*/ - { - // window 에서 _open() 함수는 \r\n 을 한 문자로 입력받음에 주의. - // AL_AddAllocSize 는 파일 APC_FileName 의 크기보다 더 큰 메모리가 필요할 경우에 전달한다. - - if(sizeof(TypeChar) > 1 ) - { - // not supported - - return false; - }/* - if(sizeof(TypeChar) > 1 )*/ - - #ifndef _WIN - - int AH_FileDesc = ::open - (APC_FileName, ZNsConst::ZNsLlioMode::Read); - - if(AH_FileDesc == -1) return false; - - // 파일 기술자를 파일의 맨 끝으로 이동시켜 파일 크기를 구한다. - - off_t VL_LastPos = ::lseek - (AH_FileDesc, 0/*Offset*/, SEEK_END); // 실패시 -1 - - if(VL_LastPos== -1) - { - ::close(AH_FileDesc); return false; - }/* - if(VL_LastPos== -1)*/ - - if(AL_LoadSize>0 && VL_LastPos>AL_LoadSize) - { VL_LastPos=AL_LoadSize; } - - // 파일 기술자를 다시 처음으로 옮긴다. - ::lseek(AH_FileDesc, 0/*Offset*/, SEEK_SET); - - TypeLength VL_PrevSize = - (AB_DoAppend ? ml_UseLen : 0); - - ReAlloc //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - ( - VL_PrevSize+VL_LastPos+AL_AddAllocSize, AB_DoAppend - ); - //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - - // 윈도우에서 read() 함수는 \r\n 을 한 문자로 읽어들이므로 주의 - - TypeLength VL_ReadSize=0; - - if((VL_ReadSize = read(AH_FileDesc, mpc_Data+VL_PrevSize, VL_LastPos))<0) - { - mpc_Data[ml_UseLen=VL_PrevSize]=0; ::close(AH_FileDesc); return false; - }/* - ///////////////////////////////////////////////////////////////////////*/ - - if(VL_ReadSize>0) - mpc_Data[ml_UseLen=VL_PrevSize+VL_ReadSize]=0; - - ::close(AH_FileDesc); return true; - - #else //defined(_WIN) - - TypeLength VL_PrevSize = (AB_DoAppend ? ml_UseLen : 0) ; - HANDLE VH_File = ::CreateFile /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ - ( - APC_FileName , - GENERIC_READ , - FILE_SHARE_READ , // 공유모드: 이미 열려 있는 파일을 열 수 있게 한다. - NULL , - OPEN_EXISTING , - FILE_ATTRIBUTE_NORMAL, // 반드시 단독으로 사용되는 플래그 - NULL - ); - /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ - - if(INVALID_HANDLE_VALUE==VH_File) return false; - - DWORD dwRead2 = 0 ; - DWORD dwRead = - SetFilePointer(VH_File, 0, NULL, FILE_END); - - if(AL_LoadSize>0 && dwRead>AL_LoadSize) - { dwRead=AL_LoadSize; } - - ReAlloc(VL_PrevSize+dwRead, AB_DoAppend); - - ::SetFilePointer(VH_File, 0, NULL, FILE_BEGIN); - - if(::ReadFile(VH_File, (LPVOID)(mpc_Data+VL_PrevSize), dwRead, &dwRead2, NULL)==FALSE) - { - Invalidate(VL_PrevSize); CloseHandle(VH_File); return false; - } - /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ - - ::CloseHandle(VH_File); - - if(dwRead2>0) - mpc_Data[ml_UseLen=VL_PrevSize+dwRead2]=0; - else mpc_Data[ml_UseLen=VL_PrevSize ]=0; - - return true; - - #endif //defined(_WIN) - }/* - bool LoadFile ################################################################## - ( - TypeCharC* APC_FileName , bool AB_DoAppend=true, - TypeLength AL_AddAllocSize=0, TypeLength AL_LoadSize=0 - ) - /*#############################################################################*/ - - bool LoadFile - ( - const ZCStringBase& AR_CStrFileName , bool AB_DoAppend=true, - TypeLength AL_AddAllocSize=0, TypeLength AL_LoadSize=0 - ) - ///////////// - { - return LoadFile(AR_CStrFileName.data(), AB_DoAppend, AL_AddAllocSize, AL_LoadSize); - }/* - bool LoadFile - ( - const ZCStringBase& AR_CStrFileName , bool AB_DoAppend=true, - TypeLength AL_AddAllocSize=0, TypeLength AL_LoadSize=0 - ) - ///////////*/ - - - static TypeLength SearchFileOffset /*##########################################*/ - ( - const int AH_FileDesc , TypeCharC* APC_Search, - TypeLength AL_SearchLen, TypeLength AL_WantSearchCnt=1 - ) - /*#############################################################################*/ - { - /*/////////////////////////////////////////////////////////////////////////////////////////////////////// - - ■ AH_FileDesc 가 지정하는 파일에서 APC_Search 라는 문자열을 AL_WantSearchCnt 번째 나오는 위치를 찾는다. - 문자를 파일에서 BUFSIZ 만큼 읽어와서 문자열을 찾는데, 찾는 문자가 10 이면 읽어 올때마다 9 개(10-1) 문 - 자열을 읽어온 문자열 앞에 붙여서 조사해야 한다. 예를 들어 I Love C++ 이란 문자열을 찾는데 이전 문자열 - 의 뒷부분에서 I Love 까지는 있을 수 있기 때문이다. - - ///////////////////////////////////////////////////////////////////////////////////////////////////////*/ - - if(sizeof(TypeChar) > 1 ) - { - return 0; // not supported - }/* - if(sizeof(TypeChar) > 1 )*/ - - const int CI_SearchNo = -1 ; // 찾지 못한 상태. - - if(AL_SearchLen<1 || AL_WantSearchCnt<1) return CI_SearchNo; - - TypeLength VL_LoadLen = (((AL_SearchLen-1)/BUFSIZ)+1)*BUFSIZ ; - TypeLength VL_ReadCnt = 0; - TypeLength VL_SearchCnt = 0; - TypeLength VL_FindedPos = 0; - TypeLength VL_Offset = ::lseek(AH_FileDesc, 0, SEEK_CUR); - TypeLength VL_InnerOffset= 0; - - ZCStringBase VO_CStringBuff; VO_CStringBuff. - ReAlloc( VL_LoadLen+AL_SearchLen-1 ) ; - - while /*#######################################################*/ - ( - ( VL_ReadCnt = ::read - ( - AH_FileDesc, - VO_CStringBuff.mpc_Data + VO_CStringBuff.ml_UseLen, - VL_LoadLen - ) - ) > 0 - ) - /*#############################################################*/ - { - VO_CStringBuff.mpc_Data - [VO_CStringBuff.ml_UseLen+=VL_ReadCnt]=0; VL_InnerOffset=0; - - while ////////////////////////////////////////////////// - ( ( VL_FindedPos = - VO_CStringBuff.FindPos - ( - APC_Search, AL_SearchLen, VL_InnerOffset - ) - ) >= 0 - ) - //////////////////////////////////////////////////////// - { - if(++VL_SearchCnt>=AL_WantSearchCnt) - { - /* 이전에는 찾은 경우에 아래 코드로 찾았다면 파일 포인터를 - 원래 위치로 돌렸었다. 크게 의미가 없는 것 같다. */ - - // lseek(AH_FileDesc,VL_PrevOffset,SEEK_SET); - - return VL_Offset+VL_FindedPos ; - }/* - if(++VL_SearchCnt>=AL_WantSearchCnt)*/ - - VL_InnerOffset = VL_FindedPos + AL_SearchLen ; - }/* - while(VL_FindedPos=VO_CStringBuff.FindPos(~))>=0)*/ - - if(VO_CStringBuff.ml_UseLen>=AL_SearchLen) - { - VL_Offset += VO_CStringBuff.ml_UseLen-AL_SearchLen+1 ; - - VO_CStringBuff.MoveFirst(VO_CStringBuff.ml_UseLen-AL_SearchLen+1); - }/* - if(VO_CStringBuff.ml_UseLen>=AL_SearchLen)*/ - }/* - while ############################################################################### - ( - ( VL_ReadCnt = ::read - ( - AH_FileDesc, VO_CStringBuff.mpc_Data+VO_CStringBuff.ml_UseLen, VL_LoadLen - ) - ) > 0 - ) - ###################################################################################*/ - - - return CI_SearchNo; // 이때는 못 찾은 것이다 - }/* - static TypeLength SearchFileOffset ############################################## - ( - const int AH_FileDesc , TypeCharC* APC_Search, - TypeLength AL_SearchLen, TypeLength AL_WantSearchCnt=1 - ) - /*#############################################################################*/ - - #ifdef _WIN - static TypeLength SearchFileOffset( ////////////////////////////// - HANDLE AH_File , - TypeCharC* APC_Search , - TypeLength AL_SearchLen , - TypeLength AL_WantSearchCnt=1 , - LPOVERLAPPED lpOverlapped =NULL - /*/////////*/ ) ///////////////////////////////////////////////*/ - { - if(sizeof(TypeChar) > 1 ) - { - return -1; // not supported - }/* - if(sizeof(TypeChar) > 1 )*/ - - if(AL_SearchLen<1 || AL_WantSearchCnt<1) return -1; - - DWORD VL_ReadCnt =0; - TypeLength VL_LoadLen=(((AL_SearchLen-1)/BUFSIZ)+1)*BUFSIZ; - TypeLength VL_SearchCnt =0; - TypeLength VL_FindedPos =0; - ZTypLLong VL_Offset =Seek(AH_File, 0, FILE_CURRENT); //lseek(AH_FileDesc,0,SEEK_CUR); - TypeLength VL_PrevOffset =VL_Offset; - TypeLength VL_InnerOffset=0; - - ZCStringBase VO_CStringBuff; VO_CStringBuff. - ReAlloc(VL_LoadLen+AL_SearchLen-1) ; - - while(true) - { - const bool CB_IsFalse = ////////////////////////////////////// - ( - ::ReadFile - ( - AH_File , - VO_CStringBuff.c_str() + VO_CStringBuff.ml_UseLen, - VL_LoadLen , - &VL_ReadCnt , - lpOverlapped - )==FALSE || VL_ReadCnt<1 - ); - ////////////////////////////////////////////////////////////// - - if(CB_IsFalse){ return -1; } - - - VO_CStringBuff.mpc_Data //>>>>>>>>>>>>>>>>>>>> - [ - VO_CStringBuff.ml_UseLen += VL_ReadCnt - ] =0 ; - //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - - VL_InnerOffset=0; - - while /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ - ( - ( VL_FindedPos = VO_CStringBuff.FindPos - (APC_Search, AL_SearchLen, VL_InnerOffset) - ) >=0 - ) - /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ - { - if(++VL_SearchCnt>=AL_WantSearchCnt) - { - return VL_Offset+VL_FindedPos ; - }/* - //////////////////////////////////*/ - - VL_InnerOffset = VL_FindedPos + AL_SearchLen ; - } - /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ - - if(VO_CStringBuff.ml_UseLen>=AL_SearchLen) - { - VL_Offset += - VO_CStringBuff.ml_UseLen-AL_SearchLen+1 ; - VO_CStringBuff.MoveFirst( - VO_CStringBuff.ml_UseLen-AL_SearchLen+1 ); - }/* - ////////////////////////////////////////*/ - }/* - while(true)*/ - - - return -1; // 이때는 못 찾은 것이다 - }/* - static TypeLength SearchFileOffset( ////////////////////////////// - HANDLE AH_File , - TypeCharC* APC_Search , - TypeLength AL_SearchLen , - TypeLength AL_WantSearchCnt=1 , - LPOVERLAPPED lpOverlapped =NULL - ///////////// ) ///////////////////////////////////////////////*/ - - #endif // _WIN - - - #ifdef _WIN - - static TypeLength SearchFileOffset( ////////////////////////////// - LPCTSTR APC_FileName , - TypeCharC* APC_Search , - TypeLength AL_SearchLen , - TypeLength AL_WantSearchCnt=1, - LPOVERLAPPED lpOverlapped =NULL - /*/////////*/ ) ///////////////////////////////////////////////*/ - { - if(sizeof(TypeChar) > 1 ) - { - return -1; // not supported - }/* - if(sizeof(TypeChar) > 1 )*/ - - HANDLE VH_File = ::CreateFile( - APC_FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - - if(VH_File==INVALID_HANDLE_VALUE) return -1; - - TypeLength VL_Offset = SearchFileOffset( - VH_File, APC_Search, AL_SearchLen, AL_WantSearchCnt, lpOverlapped); - - ::CloseHandle(VH_File); return VL_Offset; - }/* - static TypeLength SearchFileOffset( ////////////////////////////// - LPCTSTR APC_FileName , - TypeCharC* APC_Search , - TypeLength AL_SearchLen , - TypeLength AL_WantSearchCnt=1, - LPOVERLAPPED lpOverlapped =NULL - ///////////// ) ///////////////////////////////////////////////*/ - - #else // !defined(_WIN) - - // 리눅스의 경우 - - static TypeLength SearchFileOffset - ( - TypeCharC* APC_FileName, TypeCharC* APC_Search, - TypeLength AL_SearchLen, TypeLength AL_WantSearchCnt=1 - ) - ////////////////////////////////// - { - if(sizeof(TypeChar) > 1 ) - { - return -1; // not supported - }/* - if(sizeof(TypeChar) > 1 )*/ - - int AH_FileDesc = ::open(APC_FileName,O_RDONLY); - - if(AH_FileDesc<0) return -1; - - TypeLength VL_Offset = SearchFileOffset( - AH_FileDesc, APC_Search, AL_SearchLen, AL_WantSearchCnt); - - ::close(AH_FileDesc); return VL_Offset; - }/* - static TypeLength SearchFileOffset - ( - TypeCharC* APC_FileName, TypeCharC* APC_Search, - TypeLength AL_SearchLen, TypeLength AL_WantSearchCnt=1 - ) - ////////////////////////////////*/ - - #endif //!defined(_WIN) - - - static TypeLength SearchFileOffsetBackward /*##################################*/ - ( - const int AH_FileDesc , TypeCharC* APC_Search, - TypeLength AL_SearchLen, TypeLength AL_WantSearchCnt=1 - ) - /*#############################################################################*/ - { - if(sizeof(TypeChar) > 1 ) - { - return -1; // not supported - }/* - if(sizeof(TypeChar) > 1 )*/ - - - // SearchFileOffset() 함수와 역할은 비슷하나 뒤에서 앞으로 접근한다. - - if(AL_SearchLen<1 || AL_WantSearchCnt<1) return -1; - - TypeLength VL_LoadLen =(((AL_SearchLen-1)/BUFSIZ)+1)*BUFSIZ; - TypeLength VL_ReadCnt =0; - TypeLength VL_SearchCnt =0; - TypeLength VL_FindedPos =0; - TypeLength VL_Offset =::lseek(AH_FileDesc,0,SEEK_CUR); - TypeLength VL_InnerOffset=0; - TypeLength VL_Offset2 =VL_Offset; - - if(VL_Offset0) - { - VL_Offset2=VL_Offset; - - if((VL_Offset2 -= VL_LoadLen)<0) VL_Offset2 = 0 ; - - if(::lseek(AH_FileDesc, VL_Offset2, SEEK_SET)<0) - { return -1; } - //////////////////////////////////////////////// - - const bool VB_IsFalse = /*@@@@@@@@@@@@@@@@@@@@*/ - ( - ( VL_ReadCnt=::read - ( - AH_FileDesc, VO_CStringBuff.mpc_Data, VL_Offset-VL_Offset2 - ) - )<1 || VL_Offset-VL_Offset2 != VL_ReadCnt - ); - if(VB_IsFalse) return -1; /*@@@@@@@@@@@@@@@@@@*/ - - VO_CStringBuff.mpc_Data - [VO_CStringBuff.ml_UseLen=VL_ReadCnt]=0; - - if(AL_SearchLen>1) VO_CStringBuff(VO_CStringBack); - - VL_InnerOffset=VO_CStringBuff.ml_UseLen-1; - - while ////////////////////////////////////////////////////// - ( - ( VL_FindedPos=VO_CStringBuff.FindPosFromEnd - ( - APC_Search, AL_SearchLen, VL_InnerOffset - ) - ) >=0 - ) - //////////////////////////////////////////////////////////// - { - if(++VL_SearchCnt>=AL_WantSearchCnt) - { return VL_Offset2+VL_FindedPos; } - - VO_CStringBack.Invalidate(); - VO_CStringBack( - VO_CStringBuff.mpc_Data, AL_SearchLen-1); - - VL_InnerOffset = VL_FindedPos ; - }/* - //////////////////////////////////////////////////////////*/ - - VL_Offset=VL_Offset2 ; - }/* - while(VL_Offset>0)*/ - - - return -1; // 이때는 못 찾은 것이다 - }/* - static TypeLength SearchFileOffsetBackward ###################################### - ( - const int AH_FileDesc , TypeCharC* APC_Search, - TypeLength AL_SearchLen, TypeLength AL_WantSearchCnt=1 - ) - ###############################################################################*/ - - - #ifdef _WIN - - static TypeLength SearchFileOffsetBackward( ////////////////////// - HANDLE AH_File , - TypeCharC* APC_Search , - TypeLength AL_SearchLen , - TypeLength AL_WantSearchCnt=1 , - LPOVERLAPPED lpOverlapped =NULL - /*/////////*/ ) ///////////////////////////////////////////////*/ - { - // SearchFileOffset() 함수와 역할은 비슷하나 뒤에서 앞으로 접근한다. - - if(sizeof(TypeChar) > 1 ) - { - return -1; // not supported - }/* - if(sizeof(TypeChar) > 1 )*/ - - if(AL_SearchLen<1 || AL_WantSearchCnt<1) return -1; - - TypeLength VL_LoadLen =(((AL_SearchLen-1)/BUFSIZ)+1)*BUFSIZ; - DWORD VL_ReadCnt =0; - TypeLength VL_SearchCnt =0; - TypeLength VL_FindedPos =0; - ZTypLLong VL_Offset =Seek(AH_File, 0, FILE_CURRENT); - TypeLength VL_InnerOffset=0; - TypeLength VL_Offset2 =VL_Offset; - - if(VL_Offset0) - { - VL_Offset2=VL_Offset; - - if((VL_Offset2-=VL_LoadLen)<0) VL_Offset2 = 0 ; - - if(Seek(AH_File, VL_Offset2, FILE_BEGIN)<0) return -1; - - const bool CB_IsFalse = ////////////////////////////// - ( - ::ReadFile - ( - AH_File , - VO_CStringBuff.mpc_Data , - VL_Offset-VL_Offset2 , - &VL_ReadCnt , - lpOverlapped - )==FALSE || VL_Offset-VL_Offset2 != VL_ReadCnt - ); - if(CB_IsFalse) return -1; //////////////////////////// - - - VO_CStringBuff.mpc_Data - [VO_CStringBuff.ml_UseLen=VL_ReadCnt]=0; - - if(AL_SearchLen>1) VO_CStringBuff(VO_CStringBack); - - VL_InnerOffset=VO_CStringBuff.ml_UseLen-1; - - while ( ( VL_FindedPos = VO_CStringBuff.FindPosFromEnd - ( APC_Search, AL_SearchLen, VL_InnerOffset ) - ) >= 0 - ) - //////////////////////////////////////////////////////// - { - if(++VL_SearchCnt>=AL_WantSearchCnt) - { return VL_Offset2+VL_FindedPos; } - - VO_CStringBack.Invalidate(); - VO_CStringBack - (VO_CStringBuff.mpc_Data, AL_SearchLen-1); - - VL_InnerOffset = VL_FindedPos ; - }/* - //////////////////////////////////////////////////////*/ - - VL_Offset=VL_Offset2 ; - }/* - while(VL_Offset>0)*/ - - return -1; // 이때는 못 찾은 것이다 - }/* - static TypeLength SearchFileOffsetBackward( ////////////////////// - HANDLE AH_File , - TypeCharC* APC_Search , - TypeLength AL_SearchLen , - TypeLength AL_WantSearchCnt=1 , - LPOVERLAPPED lpOverlapped =NULL - ///////////// ) ///////////////////////////////////////////////*/ - - - #endif // _WIN - - - bool LoadFilePart( - TypeCharC* APC_FileName, TypeLength AL_LoadSize, TypeLength AL_Offset=0) - { - if(sizeof(TypeChar) > 1 ) - { - return false; // not supported - }/* - if(sizeof(TypeChar) > 1 )*/ - - #ifndef _WIN - - int AH_FileDesc = ::open - (APC_FileName, ZNsConst::ZNsLlioMode::Read); - - if(AH_FileDesc==-1) return false; - - TypeLength VL_TempOffset = ::lseek - (AH_FileDesc, AL_Offset, SEEK_SET); // 실패시 -1 - - if(VL_TempOffset==-1) return false; - - bool VB_Return = ReadFile(AH_FileDesc, AL_LoadSize); - - ::close(AH_FileDesc); return VB_Return; - - #else //!defined(_WIN) - - HANDLE VH_File = ::CreateFile ///////////////// - ( - APC_FileName , - GENERIC_READ , - FILE_SHARE_READ ,/* 공유모드: 이미 열려 있는 파일을 열 수 있게 한다. */ - NULL , - OPEN_EXISTING , - FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY, - NULL - ); - if(INVALID_HANDLE_VALUE==VH_File) return false; - - - ::SetFilePointer( - VH_File, AL_Offset, NULL, FILE_BEGIN); - - bool VB_Return = ReadFile(VH_File, AL_LoadSize); - - ::CloseHandle(VH_File); return VB_Return; - - #endif //!defined(_WIN) - }/* - bool LoadFilePart( - TypeCharC* APC_FileName, TypeLength AL_LoadSize, TypeLength AL_Offset=0)*/ - - - TypeLength ReadFile(int AH_FileDesc, TypeLength AL_ReadByte) - { - if(sizeof(TypeChar) > 1 ) - { - return -1; // not supported - }/* - if(sizeof(TypeChar) > 1 )*/ - - TypeLength VL_PrevLen = ml_UseLen ; - TypeLength VL_ReadCnt = 0 ; - - ReAllocKeep(VL_PrevLen+AL_ReadByte); - - VL_ReadCnt = ::read( - AH_FileDesc, mpc_Data+VL_PrevLen, AL_ReadByte); - - if(VL_ReadCnt>0) - mpc_Data[ml_UseLen=VL_PrevLen+VL_ReadCnt]=0; - else mpc_Data[ml_UseLen=VL_PrevLen ]=0; - - return VL_ReadCnt; - }/* - TypeLength ReadFile(int AH_FileDesc, TypeLength AL_ReadByte)*/ - - - TypeLength ReadFile(FILE* AP_HFile, TypeLength AL_ReadByte) - { - if(sizeof(TypeChar) > 1 ) - { - return -1; // not supported - }/* - if(sizeof(TypeChar) > 1 )*/ - - TypeLength VL_PrevLen = ml_UseLen ; - TypeLength VL_ReadCnt = 0 ; - - ReAllocKeep(VL_PrevLen+AL_ReadByte); - - VL_ReadCnt = ::fread( - mpc_Data+VL_PrevLen, sizeof(TypeChar), AL_ReadByte, AP_HFile); - - if(VL_ReadCnt>0) - mpc_Data[ml_UseLen=VL_PrevLen+VL_ReadCnt]=0; - else mpc_Data[ml_UseLen=VL_PrevLen ]=0; - - return VL_ReadCnt; - }/* - TypeLength ReadFile(FILE* AP_HFile, TypeLength AL_ReadByte)*/ - - - /* ReadFileSearch() 함수는 한 문자씩 ZCStringBase object 에 더하고 있으므로 - 메모리 할당이 빈번히 일어나지 않도록 충분한 메모리를 미리 잡아두는 것이 중요하다. */ - - TypeLength ReadFileSearch /*##########################*/ - ( - int AH_FileDesc , TypeCharC* APC_Search, - TypeLength AL_SearchLen, TypeLength AL_SearchCnt - ) - /*####################################################*/ - { - if(sizeof(TypeChar) > 1 ) - { - return 0; // not supported - }/* - if(sizeof(TypeChar) > 1 )*/ - - if(AL_SearchLen<1 || AL_SearchCnt<1) return 0; - - TypeLength VL_ReadSize ; - TypeLength VL_AllReadSize=0; - TypeLength VL_SearchIndex=0; - TypeLength i ; - - TypeLength VL_NowSearchCnt=0 ; - TypeChar VC_TempChar ; - TypeChar VCA_FileBuff[BUFSIZ+1]; - - while((VL_ReadSize = ::read(AH_FileDesc, VCA_FileBuff, BUFSIZ))>0) - { - for(i=0; i=AL_SearchLen) - { - // 해당하는 문자열을 찾았다면... - - if(++VL_NowSearchCnt>=AL_SearchCnt) - { return VL_AllReadSize+i+1; } - - VL_SearchIndex=0; - }/* - >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ - }/* - for(i=0; i0)*/ - - return 0; - }/* - TypeLength ReadFileSearch ############################## - ( - int AH_FileDesc , TypeCharC* APC_Search, - TypeLength AL_SearchLen, TypeLength AL_SearchCnt - ) - ######################################################*/ - - - TypeLength ReadFileSearch /*##########################*/ - ( - FILE* AP_HFile , TypeCharC* APC_Search, - TypeLength AL_SearchLen, TypeLength AL_SearchCnt - ) - /*####################################################*/ - { - if(sizeof(TypeChar) > 1 ) - { - return 0; // not supported - }/* - if(sizeof(TypeChar) > 1 )*/ - - if(AL_SearchLen<1 || AL_SearchCnt<1) return 0; - - TypeLength VL_ReadSize ; - TypeLength VL_AllReadSize =0; - TypeLength VL_SearchIndex =0; - TypeLength i =0; - - TypeLength VL_NowSearchCnt=0; - TypeChar VC_TempChar =0; - TypeChar VCA_FileBuff[BUFSIZ+1]; - - while((VL_ReadSize = ::fread( - VCA_FileBuff, sizeof(TypeChar), BUFSIZ, AP_HFile))>0) - { - for(i=0; i=AL_SearchLen) - { - // 해당하는 문자열을 찾았다면... - - if(++VL_NowSearchCnt>=AL_SearchCnt) - { return VL_AllReadSize+i+1; } - - VL_SearchIndex=0; - }/* - >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ - }/* - for(i=0; i0)*/ - - return 0; - }/* - TypeLength ReadFileSearch ############################## - ( - FILE* AP_HFile , TypeCharC* APC_Search, - TypeLength AL_SearchLen, TypeLength AL_SearchCnt - ) - ######################################################*/ - - - TypeLength ReadFileSearch - ( - TypeCharC* APC_FileName, TypeCharC* APC_Search, - TypeLength AL_SearchLen, TypeLength AL_SearchCnt - ) - /*#####################*/ - { - if(sizeof(TypeChar) > 1 ) - { - return -1; // not supported - }/* - if(sizeof(TypeChar) > 1 )*/ - - #ifdef _WIN - - #define MyCloseFleHandle CloseHandle - - HANDLE AH_FileDesc=::CreateFile - ( - APC_FileName, GENERIC_READ , FILE_SHARE_READ , - NULL , OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL - ); - /////////////////////////////// - - if(AH_FileDesc==INVALID_HANDLE_VALUE) return -1; - - #else - - #define MyCloseFleHandle close - - int AH_FileDesc=::open( - APC_FileName, ZNsConst::ZNsLlioMode::Read); - - if(AH_FileDesc==-1) return -1; - - #endif - - TypeLength VL_ReadSize=ReadFileSearch( - AH_FileDesc, APC_Search, AL_SearchLen, AL_SearchCnt); - MyCloseFleHandle(AH_FileDesc); - - return VL_ReadSize; ////////////////// - - #undef MyCloseFleHandle - }/* - TypeLength ReadFileSearch - ( - TypeCharC* APC_FileName, TypeCharC* APC_Search, - TypeLength AL_SearchLen, TypeLength AL_SearchCnt - ) - #######################*/ - - - #ifdef _WIN - - - TypeLength ReadFile( - HANDLE AH_FileHandle, TypeLength AL_ReadByte, LPOVERLAPPED lpOverlaped=NULL) - { - /*////////////////////////////////////////////////////////////////// - - ReadFile( HANDLE AH_File, - LPVOID lpBuffer, - DWORD nNumberOfBytesToRead, - LPDWORD lpNumberOfBytesRead, - LPOVERLAPPED lpOverlaped // 비동기 입출력이 아니면 NULL - ////// ) - - //////////////////////////////////////////////////////////////////*/ - - if(sizeof(TypeChar) > 1 ) - { - return -1; // not supported - }/* - if(sizeof(TypeChar) > 1 )*/ - - TypeLength VL_PrevLen=ml_UseLen; - DWORD VL_ReadCnt=0 ; - - ReAllocKeep(VL_PrevLen+AL_ReadByte); - - const BOOL VB_IsOK = ::ReadFile - ( - AH_FileHandle, (TypeChar*)(mpc_Data)+VL_PrevLen, - AL_ReadByte , &VL_ReadCnt, lpOverlaped - ); - /////////////////////////////// - - if(VB_IsOK==FALSE) - { - CorrectLength(VL_PrevLen); return -1; - }/* - if(VB_IsOK==FALSE)*/ - - if(VL_ReadCnt>0) - mpc_Data[ml_UseLen=VL_PrevLen+VL_ReadCnt]=0; - else mpc_Data[ml_UseLen=VL_PrevLen ]=0; - - return VL_ReadCnt; - }/* - TypeLength ReadFile( - HANDLE AH_FileHandle, TypeLength AL_ReadByte, LPOVERLAPPED lpOverlaped=NULL)*/ - - - TypeLength ReadFileSearch /*###################################################*/ - ( - HANDLE AH_FileHandle , - TypeCharC* APC_Search , - TypeLength AL_SearchLen , - TypeLength AL_SearchCnt , - LPOVERLAPPED lpOverlapped=NULL - ) - /*#############################################################################*/ - { - if(sizeof(TypeChar) > 1 ) - { - return 0; // not supported - }/* - if(sizeof(TypeChar) > 1 )*/ - - if(AL_SearchLen<1 || AL_SearchCnt<1) return 0; - - DWORD VL_ReadSize ; - TypeLength VL_AllReadSize =0; - TypeLength VL_SearchIndex =0; - TypeLength VL_NowSearchCnt=0; - TypeLength i ; - - TypeChar VC_TempChar ; - TypeChar VCA_FileBuff[BUFSIZ+1]; - - while ( ::ReadFile ///////////////////////////////////////////// - ( - AH_FileHandle, (TypeChar*)VCA_FileBuff, - BUFSIZ , &VL_ReadSize , lpOverlapped - )==TRUE && VL_ReadSize > 0 - ) - //////////////////////////////////////////////////////////////// - { - for(i=0; i=AL_SearchLen) - { - // 해당하는 문자열을 찾았다면... - - if(++VL_NowSearchCnt>=AL_SearchCnt) - { return VL_AllReadSize+i+1; } - - VL_SearchIndex=0; - }/* - >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ - }/* - for(i=0;i 0 - ) - //////////////////////////////////////////////////////////////*/ - - return 0; - }/* - TypeLength ReadFileSearch ####################################################### - ( - HANDLE AH_FileHandle , - TypeCharC* APC_Search , - TypeLength AL_SearchLen , - TypeLength AL_SearchCnt , - LPOVERLAPPED lpOverlapped=NULL - ) - /*#############################################################################*/ - - bool WriteFile(HANDLE AH_FileHandle) const { - if(sizeof(TypeChar) > 1 ) - { - return false; // not supported - }/* - if(sizeof(TypeChar) > 1 )*/ - if(ml_UseLen<1) return true; /*////////////////////////////////////////////////////////////////// @@ -6131,15 +5113,17 @@ namespace ZNsMain //////////////////////////////////////////////////////////////////*/ - DWORD VDW_WriteCnt=0; + DWORD VDW_WriteCnt=0; TypeLength VL_WriteCnt=ml_UseLen*sizeof(TypeChar); - return ::WriteFile( //////////////// - AH_FileHandle, - mpc_Data , - ml_UseLen , - &VDW_WriteCnt, - NULL - /*/////////*/ )==TRUE; ///////////// + return ::WriteFile //:::::::::::::::::::::::::::::::::::::::::::::::::::: + ( + AH_FileHandle , + mpc_Data , + VL_WriteCnt , + &VDW_WriteCnt , + NULL + )==TRUE; + //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }/* bool WriteFile(HANDLE AH_FileHandle) const*/ @@ -6148,31 +5132,23 @@ namespace ZNsMain bool WriteFile(int AH_FileDesc) const { - if(sizeof(TypeChar) > 1 ) - { - return false; // not supported - }/* - if(sizeof(TypeChar) > 1 )*/ + if(ml_UseLen<1) return true; - if(ml_UseLen<1) return true; TypeLength VUL_AllSize=ml_UseLen; + TypeLength VL_AllSize = ml_UseLen*sizeof(TypeChar) ; return ::write( - AH_FileDesc, mpc_Data, VUL_AllSize)>=VUL_AllSize ; + AH_FileDesc, mpc_Data, VL_AllSize)>=VL_AllSize ; }/* bool WriteFile(int AH_FileDesc) const*/ bool WriteFile(FILE* AP_HFile) const { - if(sizeof(TypeChar) > 1 ) - { - return false; // not supported - }/* - if(sizeof(TypeChar) > 1 )*/ + if(ml_UseLen<1) return true; + + TypeLength VL_AllSize = ml_UseLen; - if(ml_UseLen<1) return true; TypeLength VUL_AllSize=ml_UseLen; - return ::fwrite( - mpc_Data, sizeof(TypeChar), ml_UseLen, AP_HFile)>=VUL_AllSize; + mpc_Data, sizeof(TypeChar), VL_AllSize, AP_HFile)>=VL_AllSize; }/* bool WriteFile(FILE* AP_HFile) const*/ @@ -6180,12 +5156,6 @@ namespace ZNsMain { // int AI_RightMode 은 리눅스에서만 쓴다. - if(sizeof(TypeChar) > 1 ) - { - return false; // not supported - }/* - if(sizeof(TypeChar) > 1 )*/ - #ifdef _WIN HANDLE VH_File = ::CreateFileA @@ -6204,9 +5174,11 @@ namespace ZNsMain ::SetEndOfFile(VH_File) ; // 덧붙이는 경우가 아니면, 기존 내용을 지운다. //else + TypeLength VL_AllSize = ml_UseLen*sizeof(TypeChar); + DWORD NumberOfBytesWritten = 0 ; const BOOL CB_IsWriteOK = - ::WriteFile(VH_File, mpc_Data, ml_UseLen, &NumberOfBytesWritten, NULL); + ::WriteFile(VH_File, mpc_Data, VL_AllSize, &NumberOfBytesWritten, NULL); if(CB_IsWriteOK==FALSE) { @@ -6239,11 +5211,13 @@ namespace ZNsMain { return false; } } - if(write(AH_FileDesc, mpc_Data, VUL_AllSize)