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
[28647] Re:c++에서 파일을 임의로 접근 할수 있는 방법은 없나요?
이점한 [redyouth] 1199 읽음    2004-01-28 19:04
파일을 접근 하는 방법은 여러가지가 있습니다. 순수 C++이면 쓰시던거 그대로 쓰시고
빌더를 사용 하신다면 VCL이 편리 하죠. VCL을 이용 할 수 있는 방법들... 예시...

TFileStream을 이용하는 방법, TStringList를 이용하는 방법, 뭐 AnsiString을 이용 할 수도 있겠구요.

한두어가지 쓰던 소스를 올려 놓겠습니다. 참고로 성능은 TFileStream이 낫겠죠.

  // TStringList를 이용하는 방법
  // 사용하기가 젤 간편하긴 하죠. 하지만 파일이 커지면 전체 파일을 전체 액세스 해야 하기
  // 때문에 성능이 저하 됩니다. 짧은 텍스트 파일 처리 때 편리.
  // TStringList에서 로딩 된 텍스트는 TStringList의 "Text"프로퍼티에 AnsiString 형태로
  // 쓰기 좋게 들어 있답니다. ^^;
  try
  {
      // 처리 루틴 ....
  }
  catch ( Exception &exception )
  {
    // 에러가 발생하면 에러 로그에 저장
    AnsiString Path = ExtractFilePath( Application->ExeName );
    TStringList *Log = new TStringList;
    if ( FileExists( Path + "error.log" ) )
      Log->LoadFromFile( Path + "error.log" );
    Log->Add( Now().DateTimeString() + "(메인소켓): " + exception.Message );
    Log->SaveToFile( Path + "error.log" );
    delete Log;
  }
//=========================================

    // 아래 소스는 소켓 스레드블럭킹에서 쓰던 소스중의 일부 인데
    // TFileStream을 이용해서 파일을 전송 하던 소스중의 일부 입니다.
    // 자세한 도움말은 빌더에서 제공 하는 것과
    // 여기 게시판에서 검색 하시면 여러가지 있을겁니다.
          TWinSocketStream *pStream = new TWinSocketStream(ClientSocket, CLIENTWAITTIME);
          TFileStream* SendFile = new TFileStream( fName, fmOpenReadWrite | fmShareDenyNone );
          if ( SendFile->Size > -1 )
          {
            SendFile->Position = 0;

            char *buff = new char[ 1024 ];
            memset( buff, 0, sizeof(buff) );

            int buff_size = 1024;
            int endi = SendFile->Size / 1024;
            int modi = SendFile->Size % 1024;
            endi++;
            if ( modi > 0 )
              endi++;
            for (int i= 0; i < endi; i++ )
            {
              SendFile->Position = i * 1024;
              buff_size = SendFile->Read( buff, 1024 );
              pStream->Write( buff, buff_size);
              Application->ProcessMessages();
              if ( ( ClientSocket->Connected == false )||( buff_size < 1024 ) )
                break;
            }
            delete buff;
          }
          delete SendFile;

// 도움 되시길....










지후 님이 쓰신 글 :
: C++로 소스를 짯는데요...
: 파일을 임의로 접근을 해야하는데..
: 책에는 2진코드로된 파일만이 임의접근 방법 밖에 나와있지 않아서요
: 그냥 텍스트 문서는 임으로 접근을 할수 있는 방법이 없는건지..
: 있으면 좀 가리켜 주세요 책을 아무리 뒤져도 안나오네요
: 있는데 못찾는 건지도 모르겠지만... 하루종일 뒤졌는데..ㅡㅡ;;
: 안나오니..ㅜㅜ; 방법줌 가리켜 주세요...

+ -

관련 글 리스트
28645 c++에서 파일을 임의로 접근 할수 있는 방법은 없나요? 지후 835 2004/01/28
28647     Re:c++에서 파일을 임의로 접근 할수 있는 방법은 없나요? 이점한 1199 2004/01/28
34389         Re:Re:c++에서 파일을 임의로 접근 할수 있는 방법은 없나요? 지후 847 2004/01/28
28653         Re:Re:c++에서 파일을 임의로 접근 할수 있는 방법은 없나요? 921 2004/01/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.