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
[61126] Re:2010에서 OpenDialog 후 파일선택후 fopen시 에러 발생(t_str관련)
장성호 [nasilso] 1650 읽음    2010-05-18 18:48
음...

문제점

UnicodeString 에서 t_str() 함수는
return값이 char* 이기는 합니다만..

문자열을 AnsiString으로 변환한후에 char*를 return하는것이 아닙니다.

그냥 wchar_t *  를  char *로 return하는것 뿐입니다.

숫자등 codepage가 잘 맞는 경우엔 file이 open되기도 하겠지만

그렇지 않는 경우엔 file이 open되지 않을것입니다.

해결방법

1. UnicodeString을 AnsiStirng 으로 변환한 후에 사용하는 방법이 있을것 같습니다.

   다음과 같이 ..
  
      AnsiString as=OpenDialog1->FileName;
      FILE *f;
      f=fopen(as.c_str(),"r");
   


2. 아니면 char*를 받는 fopen대신 wchar_t*를 받는 _wfopen을 써보세요

      FILE *f;
      f=_wfopen(OpenDialog1->FileName.c_str(),L"r");



그럼..


대마두 님이 쓰신 글 :
: 너무 쉬운거 제가 여쭤보는거 아닌지 모르겠네요..
:
: FILE *fp;
: if (OpenDialog1->Execute()) fp = fopen(OpenDialog1->FileName.t_str(), "r");
:
: 보시다시피 OpenDialog 를 열어 텍스트파일이름을 받고 그 파일을 fopen으로 여는 소스입니다.
:
: 기존에는 AnsiString으로 사용했기때문에 t_str()대신 c_str()을 사용했었는데요.
:
: 당연히 실행에 문제 없었습니다.
:
: 해당 프로그램을 2010으로 포팅후 실행해보니 오류 발생하네요.
:
: 브레이크 포인트 찍어보니 t_str()로 char*로 변환했을때 값이 제대로 안들어가는거 같은데요.
:
: 혹시 이런 문제 겪어보신분 있으신가요?
:
: 아님 제가 어디 잘못 사용하는 부분이 있나요?

+ -

관련 글 리스트
61124 2010에서 OpenDialog 후 파일선택후 fopen시 에러 발생(t_str관련) 대마두 1520 2010/05/18
61126     Re:2010에서 OpenDialog 후 파일선택후 fopen시 에러 발생(t_str관련) 장성호 1650 2010/05/18
61127         감사합니다 대마두 1318 2010/05/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.