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
[25935] Re:[질문]텍스트파일로 읽고 쓰기시
파일을 오픈하는 mode [] 880 읽음    2003-06-14 00:44
손효철 님이 쓰신 글 :
: 텍스트파일로 읽고 쓰기시 문자열로 123 345 678 이 한레코드로 100개의 레코드를
: 기록한후 70번째 것만 FSEEK로 이동하여 수정하고 싶습니다
: 아래의 루틴입니다
:
: 그런데 70번째의 내용을 쓰면 0~69까지가 지워져 버립니다
: 왜그런지 아시는분은 답장 좀 부탁드립니다
:
:
:
: void __fastcall TForm1::FormCreate(TObject *Sender)
: {
: struct tag{
:         int aa1;
:         int aa2;
:         int aa3;
: };
: struct tag input[100];  /* 파일을 읽어들여 놓을 구조체 */
:         a1=a2=a3=0;
:             fPtr=fopen("c:\\lo.txt","r");
:     if (fPtr==NULL)
:     {
:           Edit1->Text="file not found";
:            return;
:     }
:         fscanf(fPtr,"%d %d %d",&input[i].aa1,&input[i].aa2,&input[i].aa3);
:         str1.sprintf("xx  %d %d %d",input[i].aa1,input[i].aa2,input[i].aa3);
:         Memo1->Lines->Add(str1);
: //        str=str+str1;
:         fseek(fPtr, 12*1, SEEK_SET);
:
:         fscanf(fPtr,"%d %d %d",&input[i].aa1,&input[i].aa2,&input[i].aa3);
:         str1.sprintf("xx  %d %d %d",input[i].aa1,input[i].aa2,input[i].aa3);
:         Memo1->Lines->Add(str1);
:
:         fseek(fPtr, 12*2, SEEK_SET);
:
:         fscanf(fPtr,"%d %d %d",&input[i].aa1,&input[i].aa2,&input[i].aa3);
:         str1.sprintf("xx  %d %d %d",input[i].aa1,input[i].aa2,input[i].aa3);
:         Memo1->Lines->Add(str1);
:
:         fclose(fPtr);
:         Edit1->Text=str;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:     fPtr=fopen("c:\\lo.txt","w");
:     if (fPtr==NULL)
:     {
:         Edit1->Text="file not found";
:     return;
:     }
:            a1=a2=3;
:            a3=5;
:                 fseek(fPtr, 12*2, 2);
:
:            fprintf(fPtr,"%d %d %d",a1,a2,a3);
:         fclose(fPtr);
: }
: //---------------------------------------------------------------------------
:

fPtr=fopen("c:\\lo.txt","w"); <- 이렇게 write 모드로 열면 파일을 새로 만든다고 보시면 됩니다.
그러므로 기존파일 스트림의 내용은 아무것도 없어지는 거지요...
fPtr=fopen("c:\\lo.txt","a"); <- 이렇게 append 모드로 열면 내용 그대로 남아있습니다.
그럼 fseek을 가지고 작업하면 내용을 수정할 수 있겠지요.. 대신 파일을 열었을때의 작업위치는
제일 마지막으로 가있다는 것을 기억하세요..
fseek(fPtr, 12*2, 2); <- 여기에서 2의 의미를 찾아보시면 무슨 말인지 아실 겁니다..
2라고 표시하지말고.. SEEKSET으로 표현되는 형태로 적어두시면 알아보기 편하죠..
(기억이 잘 안나서 못적어드리고요 도움말 찾아보시면 되요.) SEEKXXXX 이런 형태로 define되어 있습니다. (0, 1, 2란 값으로 정의되어 있습니다.)

+ -

관련 글 리스트
25910 [질문]텍스트파일로 읽고 쓰기시 손효철 693 2003/06/12
25935     Re:[질문]텍스트파일로 읽고 쓰기시 파일을 오픈하는 mode 880 2003/06/14
25942         Re:Re:[질문]텍스트파일로 읽고 쓰기시 손효철 644 2003/06/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.