C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[26390] File Copy에 관하여..
Ryu [] 1254 읽음    2003-07-22 11:21
한개의 폴더 안에 있는 여러개의 파일들을 지정된 위치에 copy할려합니다.

void __fastcall TForm1::CopyFile(AnsiString fileName)
{

        //char       pathTarg[MAX_PATH];
        //char       pathDest[MAX_PATH];
        FILE       *input;
        HANDLE     hpFile;
        BYTE       *Buffer;

        // 해당 파일.(부트 폴더)
        //GetCurrentDirectory(MAX_PATH, pathTarg);
        //strcat(pathTarg, "\\BootDisk\\");
        //strcat(pathTarg, fileName.c_str());

        AnsiString strPathTerg = "BootDisk\\" + fileName;


        // 목적 파일
        //strcpy(pathDest, CurrentDisk.c_str());     //예) D:\
        //strcat(pathDest, fileName.c_str());

        AnsiString strPathDest =  CurrentDisk + fileName;


        //if ((input = fopen(pathTarg, "rb")) != NULL)
        if ((input = fopen(strPathTerg.c_str(), "rb")) != NULL)
        {


/**   ERROR
                         tmpFileSize = filesize(input);
                         Buffer = (BYTE *) malloc(tmpFileSize);
                         ZeroMemory(Buffer, tmpFileSize);
                         fread(&Buffer[0], 1, tmpFileSize, input);

                         try
                         {
                             TFileStream *MyFStream;
                             MyFStream = new TFileStream(strPathDest, fmCreate);

                             try
                             {
                                  MyFStream->Write(&Buffer[0], tmpFileSize);
                             }
                             catch(...) {}

                             //  2003.5.30   혹시..
                             //MyFStream->Free();
                             delete MyFStream;

                         }catch(...){}
*/



//            BYTE       *Buffer;

            tmpFileSize = filesize(input);
            Buffer = (BYTE *) malloc(tmpFileSize);
            ZeroMemory(Buffer,tmpFileSize);

            //fread(&Buffer[0], 1, tmpFileSize, input);
            fread(Buffer, 1, tmpFileSize, input);

            //-----------------------------
            // file write
            //hpFile = CreateFile(pathDest,
            hpFile = CreateFile(strPathDest.c_str(),
                      GENERIC_WRITE,
                0,               
                NULL,           
                CREATE_ALWAYS,       
                FILE_ATTRIBUTE_NORMAL,
                NULL           
                );

            if(hpFile == INVALID_HANDLE_VALUE)
        return;


        WriteFile(hpFile,
                      Buffer,
                      tmpFileSize,
                 &nBytesWriten,
                      NULL
              );

            fclose(input);
            free(Buffer);
        }
        else
        {
            //-----------------------------
            // file write
            hpFile = CreateFile(strPathDest.c_str(),
                      GENERIC_WRITE,
                0,                // not share mode
                NULL,            // security attribute
                CREATE_ALWAYS,        // create allways
                FILE_ATTRIBUTE_NORMAL,
                NULL            // handle to file with attributes to copy
                );

            if(hpFile == INVALID_HANDLE_VALUE)
        return;
        }

        CloseHandle(hpFile);

}



파일을 copy하는 부분은 위와 같습니다..

그리고 파일들에 대한 정의는

Unit.cpp에서

전역변수로 이렇게 선업했습니다.

        AnsiString fileName[] = { "AAAAAA1.SYS",   "AAAAAA2.SYS",
                                  "AAAAAA3.SYS",   "KKKKKK3.SYS",
                                  "KKKKKK4.SYS",   "KKKKKK5.BAT",
                                  "MYFILE1.SYS",   "MYFILE2.SYS",
                                  "MYFILE3.SYS",   "MYFILE4.COM",
                                  "MYFILE5.SYS",   "MYFILE6.BIN",
                                  "RYU3.EXE",      "RYU4.EXE",
                                  "MYFILE7.EXE",   "MYFILE8.EXE",
                                  "MYFILE9.SYS",   "MYFILE10.SYS",
                                  "IOIO.SYS",      "MYFILE12.EXE",
                                  "RYU1.SYS",      "MYFILE13.COM",
                                  "RYU2.SYS",      "MYFILE14.DAT" };


filecopy를 부르는데는 이렇게...
        
                if(i == startPosition + fileNum && CheckBox1->Checked && fileNum < 24)
                    CopyFile(fileName[fileNum]);

                    fileNum++;
                    startPosition++;
                }


문제는 file들이 깨지거나, 크기가 달라지거나하는 문제가 생깁니다.
어쩔때는 정상적이고, 어쩔때는 비정상적으로 문제가 생깁니다.

어디서 문제가 생겼는지여..고수님들의 의견 부탁합니다.



또하나는
BOOL CopyFile(

    LPCTSTR lpExistingFileName,    // pointer to name of an existing file
    LPCTSTR lpNewFileName,    // pointer to filename to copy to
    BOOL bFailIfExists     // flag for operation if file exists
   );

이 함수를 쓰니 에러가 나는군요..
왜 그런건지...좀..

+ -

관련 글 리스트
26390 File Copy에 관하여.. Ryu 1254 2003/07/22
32891     Re:File Copy에 관하여.. 최준호.스페로 1139 2003/07/23
32890     Re:File Copy에 관하여.. 최준호.스페로 1071 2003/07/23
32889     Re:File Copy에 관하여.. 김민식 1044 2003/07/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.