Ignore:
Timestamp:
Jul 21, 2008, 5:42:40 PM (16 years ago)
Author:
イグトランス (egtra)
Message:

ファイルハンドルが解放されず困ることがあるのでCHandleへ入れた。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/abdev/FileOperation.cpp

    r700 r705  
    2727    DWORD dw;
    2828    char *buffer,temporary[MAX_PATH];
    29     HANDLE hFile;
    30 
    31     hFile=CreateFile(path.c_str(),GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
     29
     30    ATL::CHandle hFile(CreateFile(path.c_str(),GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL));
    3231    if(hFile==INVALID_HANDLE_VALUE){
     32        hFile.Detach();
    3333        //"\"%s\" ファイルの読み込みに失敗しました。"
    3434        sprintf(temporary,STRING_ERROR_CANT_FILEOPEN,path.c_str());
     
    4141    ReadFile(hFile,buffer,i,&dw,0);
    4242    buffer[dw]=0;
    43     CloseHandle(hFile);
    4443    return buffer;
    4544}
    4645char *ReadBuffer_NonErrMsg( const std::string &path ){
    4746    extern HANDLE hHeap;
    48     int i;
    4947    DWORD dw;
    50     char *buffer;
    51     HANDLE hFile;
    52 
    53     hFile=CreateFile(path.c_str(),GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    54     if(hFile==INVALID_HANDLE_VALUE) return 0;
    55     i=GetFileSize(hFile,0);
    56     buffer=(char *)HeapAlloc(hHeap,0,i+1);
     48
     49    ATL::CHandle hFile(CreateFile(path.c_str(),GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL));
     50    if(hFile==INVALID_HANDLE_VALUE){
     51        hFile.Detach();
     52        return 0;
     53    }
     54    int i=GetFileSize(hFile,0);
     55    char *buffer=(char *)HeapAlloc(hHeap,0,i+1);
    5756    ReadFile(hFile,buffer,i,&dw,0);
    5857    buffer[dw]=0;
    59     CloseHandle(hFile);
    6058    return buffer;
    6159}
    6260_int8 WriteBuffer(const std::string &path,const char *buffer,int length, bool isEnableError)
    6361{
    64     HANDLE hFile;
    6562    DWORD dw;
    66     hFile=CreateFile(path.c_str(),GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
     63    ATL::CHandle hFile(CreateFile(path.c_str(),GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL));
    6764    if(hFile==INVALID_HANDLE_VALUE){
     65        hFile.Detach();
     66
    6867        char temporary[MAX_PATH];
    69 
    7068        if( isEnableError ){
    7169            //"\"%s\" ファイルへの書き込みに失敗しました。"
     
    7674    }
    7775    if(length) WriteFile(hFile,buffer,length,&dw,NULL);
    78     CloseHandle(hFile);
    7976    return 1;
    8077}
     
    371368    int WndNum,i2;
    372369    char temporary[MAX_PATH],str[MAX_PATH],str2[32];
    373     HANDLE fh;
    374370    DWORD dummy;
    375371
     
    404400        if(SaveFileName){
    405401            lstrcpy(temporary,SaveFileName);
    406             if((fh=CreateFile(temporary,GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL))==INVALID_HANDLE_VALUE){
    407                 sprintf(str,STRING_FILE_OVERWRIDE,temporary);
    408                 if(MessageBox(hOwner,str,APPLICATION_NAME,MB_YESNO|MB_ICONINFORMATION)==IDNO){
    409                     return 0;
     402            {
     403                ATL::CHandle fh(CreateFile(temporary,GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL));
     404                if(fh==INVALID_HANDLE_VALUE){
     405                    fh.Detach();
     406                    sprintf(str,STRING_FILE_OVERWRIDE,temporary);
     407                    if(MessageBox(hOwner,str,APPLICATION_NAME,MB_YESNO|MB_ICONINFORMATION)==IDNO){
     408                        return 0;
     409                    }
    410410                }
    411411            }
    412             CloseHandle(fh);
    413412
    414413            //ドキュメント セレクト コンボボックスから消去
     
    478477        ////////////////////////
    479478
    480         fh=CreateFile(temporary,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
    481         if(fh==INVALID_HANDLE_VALUE){
    482             sprintf(str,STRING_ERROR_CANT_FILESAVE,temporary);
    483             MessageBox(hOwner,str,STRING_ERROR,MB_OK|MB_ICONSTOP);
    484             return 0;
    485         }
    486         WriteFile(fh,pBuf,strlen(pBuf),&dummy,NULL);
    487         SetFileIdentityFromFile(*MdiInfo[WndNum], fh);
    488         CloseHandle(fh);
     479        {
     480            ATL::CHandle fh(CreateFile(temporary,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL));
     481            if(fh==INVALID_HANDLE_VALUE){
     482                fh.Detach();
     483                sprintf(str,STRING_ERROR_CANT_FILESAVE,temporary);
     484                MessageBox(hOwner,str,STRING_ERROR,MB_OK|MB_ICONSTOP);
     485                return 0;
     486            }
     487            WriteFile(fh,pBuf,strlen(pBuf),&dummy,NULL);
     488            SetFileIdentityFromFile(*MdiInfo[WndNum], fh);
     489        }
    489490
    490491
     
    501502        if(SaveFileName){
    502503            lstrcpy(temporary,SaveFileName);
    503             if((fh=CreateFile(temporary,GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL))==INVALID_HANDLE_VALUE){
    504                 sprintf(str,STRING_FILE_OVERWRIDE,temporary);
    505                 if(MessageBox(hOwner,str,APPLICATION_NAME,MB_YESNO|MB_ICONINFORMATION)==IDNO){
    506                     CloseHandle(fh);
    507                     return 0;
     504            {
     505                ATL::CHandle fh(CreateFile(temporary,GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL));
     506                if(fh==INVALID_HANDLE_VALUE){
     507                    fh.Detach();
     508                    sprintf(str,STRING_FILE_OVERWRIDE,temporary);
     509                    if(MessageBox(hOwner,str,APPLICATION_NAME,MB_YESNO|MB_ICONINFORMATION)==IDNO){
     510                        return 0;
     511                    }
    508512                }
    509513            }
    510             CloseHandle(fh);
    511514            MdiInfo[WndNum]->path = temporary;
    512515            i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(LONG_PTR)MdiInfo[WndNum]->title.c_str());
Note: See TracChangeset for help on using the changeset viewer.