Q&A

  • 파일오픈후 데이타 입력...
텍스트파일과 바이너리파일 상관 없이 모든 파일을
오픈해서 파일의 특정위치에..다른정보를 입력하고..
다시 저장하고...다시 그정보가 확인되었으면 파일을 다시오픈해서
입력했던 정보만 삭제하고 다시 저장하는 플그램을 하고있는데요..
이것이 가능한건지요??
파일오픈해서 데이타 입력하는것은 가능할꺼 같은데...
삭제시에는 어떻게 해야되는지.좀 갈켜주심 감사하겠습니다..
텍스트나 바이너리너리 상관없이 파일을 오픈하려면 어떻게
오픈해야되는지도 좀 부탁드리겠습니다...
그럼 좋은 하루 되시구여..
꼭좀 답변 부탁드립니다...

피에스 : 게시판 여기저기 뒤져봤는데 찾지를 못하겠더라구여...
바쁘시면 검색어라도 가르쳐주심 다시 한번 찾아보겠습니다..
2  COMMENTS
  • Profile
    고지범 2002.09.18 18:56
    특정위치에 다른 정보를 입력한다는 말 뜻이, Append / Update 에 따라서 달라질 듯 하네요..
    1. Update.
    |파일---------------|(특정위치)(원래내용)|-----------|
    |파일---------------|(특정위치)(바뀐내용)|-----------|
    이런 상황이라면 TFileStream 하나만 쓰면 간단합니다.
    TFileStream 에서 Seek를 사용하거나 혹은 Position을 사용해서 특정 위치로 파일 포인터를 옮기고 Write(WriteBuffer)를 사용하면 되죠...

    2. Append.
    |파일--------------|(특정위치)(원래내용)|-----------|
    |파일--------------|(특정위치)----(삽입내용)---(원래내용)|-----------|
    이런 경우라면... 별수 없습다...
    파일을 읽기 위해서 TFileStream, 새로운 내용을 저장하기 위해서 TMemoryStream을 넣어야 겠죠...
    아래 코드는 'e:test.txt'에 'abcdefghijklmnopqrstuvwxyz'가 들어 있는 상황에서, e와 f 사이에 '23456'을 추가하는 코드입니다. 간단하게 보이기 위해서 파일 검사/ 예외처리 등을 모두 삭제했습니다.
    관건은 Seek 사용과 TStream.CopyFrom이죠...
    procedure TForm1.Button2Click(Sender: TObject);
    var
       tempStream  :TFileStream;
       memStream   :TMemoryStream;
       arTemp      :array [0..10] of Char;
    begin
       tempStream := TFileStream.Create('e:test.txt', fmOpenReadWrite);
       memStream := TMemoryStream.Create;
       memStream.CopyFrom(tempStream, 5);
       StrPCopy(@arTemp[0], '23456');
       memStream.WriteBuffer(arTemp, 5);
       tempStream.Seek(soFromBeginning, 5);
       memStream.CopyFrom(tempStream, tempStream.Size - 5);
       memStream.Seek(soFromBeginning, 0);
       tempStream.Seek(soFromBeginning, 0);
       tempStream.CopyFrom(memStream, memStream.Size);
       tempStream.Free;
       memStream.Free;
    end;

    3. 삭제
    |파일--------------|(특정위치)----(삽입내용)---(원래내용)|-----------|
    |파일--------------|(특정위치)(원래내용)|-----------|
    이렇게 바뀌어야죠?
    역시 TFileStream/ TMemoryStream 사용합니다.
    여기서 관건은 Seek, CopyFrom,Position,  Size 입니다. 파일이 줄어드는 상황이니깐 Size 조절 있어야 하고요, 테스트 해보니 Seek(soFromCurrent, 5)가 제대로 동작하지 않아서 Position으로 사용했죠...
    procedure TForm1.Button3Click(Sender: TObject);
    var
       tempStream  :TFileStream;
       memStream   :TMemoryStream;
    begin
       tempStream := TFileStream.Create('e:test.txt', fmOpenReadWrite);
       memStream := TMemoryStream.Create;
       memStream.CopyFrom(tempStream, 5);
       tempStream.Position := tempStream.Position + 5;
       memStream.CopyFrom(tempStream, tempStream.Size - 10);
       memStream.Seek(soFromBeginning, 0);
       tempStream.Seek(soFromBeginning, 0);
       tempStream.CopyFrom(memStream, memStream.Size);
       tempStream.Size := tempStream.Size - 5;
       tempStream.Free;
       memStream.Free;
    end;


  • Profile
    고지범 2002.09.18 20:22
    윽... Seek 사용에서 인자를 서로 바꾸었군요... Seek(offset, origin)인데.. 거꾸로 사용되었습다..
    • 최병철
      2002.09.24 21:17
      제가 여러가 테트스한 결과 저의 실수 였읍니다. 혹시 몰라서 [Tip]에 예제 소스를 올렸읍니다. 참...
    • 한원희
      2002.09.19 18:50
      안녕하세요. 한원희입니다. 혹시, OnNewWindow2 이벤트에서 Cancel 값을 true로 설정하신건 아니겠죠? ...
    • 고지범
      2002.09.18 19:17
      윽... 레코드 정의도 없이 물어보심... 말뜻을 해석하기가... 쩝... 암튼... 1. memset ZeroMemory, Fil...
    • 박상기
      2002.09.18 14:15
      1번만 답하것소..다른건 모르오 C의 Memset에 해당하는것이 델파이에는 FillChar라고 하오 그럼...수고...
    • 김헌대
    • 2002.09.18 08:50
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김희곤
    • 2002.09.18 07:07
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김형환
      2002.09.18 18:01
    • 김홍균
      2002.09.18 08:14
    • 김희곤
      2002.09.18 08:41
    • 미소나눔
      2002.09.19 03:50
      ShortInt(value); ^^:
    • 김희곤
    • 2002.09.18 04:42
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김수경
      2002.09.18 05:10
      Form 생성시   SetBounds명령으로 Form 크기를 조절해 주시면 됩니다. 예>   ...
    • 자유지역
      2006.02.19 08:26
      Nz 함수대신 아래처럼 IIF를 사용하면 가능합니다. IIF(ISNULL(amt),0,amt) 즐프하세요
    • 김상수
    • 2002.09.18 04:21
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2002.09.18 05:13
      hsr/////////////////////////////////////////////////////////// DefaultDrawColumnCell이함수를 사용...
    • 김상수
      2002.09.18 18:28
      답변 감사드리구요 음.. 색깔도 잘 들어가고 데이타도 잘 보이는데 선택했을때 기존처럼 청...
    • 박해성
      2007.04.12 18:51
      질문을 올린신 날짜가 오랜 된 걸로 봐서 문제를 해결 하셨을 것 같은데요. 같은 문제로 고민 하시는 분...
    • 조기흠
    • 2002.09.18 03:08
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 조기흠
      2002.09.18 03:45
      두분 다 감사합니다..좋은하루되세염..
    • 한원희
      2002.09.18 03:17
      안녕하세요. 한원희입니다. 버튼을 단축키로 제어하시려면, HotKey 컴포넌트를 이용해서, 해당 키가 ...
    • KDDG_ZZOM
      2002.09.18 03:10
      팝업콤퍼넌트를 이용하시면 될것같네요...^^ 즐프하세요...
    • 김수경
      2002.09.18 05:02
      안녕하세여~ 왜 그런것이 필요한지 알 수 없지만 님이 질문하신 내용은 일반적으로 처리 할 수 없습...
    • KDDG_ZZOM
      2002.09.18 03:13
      파일오픈하고 바로 WriteLn하면 될것같은데... 예전에 전 타이틀먼저 WriteLn 하고 쿼리결과를 루프돌리면...
    • 스말(^___^)
      2002.09.18 03:23
      전 AssignFile로 파일을열고 Append를 한후에 Writeln을 쓰는 방법으로 했거든요
    • KDDG_ZZOM
      2002.09.18 04:17
      지두요... 파일오픈하고 WriteLn 하면 한줄만들어지죠? 111,222,333... 데이타인것같은데... 그거위에서 ...
    • 스말(^___^)
      2002.09.18 07:21
      저 숫자는 그냥 예일 뿐이구요 저는 함수로 호출되면서 한데이터씩 들어가고 당연히 무슨 데이터가 들어...
    • 임진묵
    • 2002.09.18 02:23
    • 1 COMMENTS
    • /
    • 0 LIKES
    • KDDG_ZZOM
      2002.09.18 03:08
      자료실에 제가 예전에 비스므리한 플그램올린적 있거든요... 공성환으로 검색해보세요... 원하는답은 아...
    • 김동완
    • 2002.09.18 02:15
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 고지범
      2002.09.18 18:56
      특정위치에 다른 정보를 입력한다는 말 뜻이, Append / Update 에 따라서 달라질 듯 하네요.. 1. Update. ...
    • 고지범
      2002.09.18 20:22
      윽... Seek 사용에서 인자를 서로 바꾸었군요... Seek(offset, origin)인데.. 거꾸로 사용되었습다..
    • 미소나눔
      2002.09.19 04:05
        OpenDialog1.Execute;   PATH := ExtractFilePath(OpenDialog1.FileName);  ...
    • 바다를향해
      2002.09.18 02:00
      확장MDI 라는 것이 있습니다. MDI는 MDI인데....일반적인 MDI보다는 조금더 유연한 것이죠... 확장MDI를 ...
    • 최만현
    • 2002.09.18 01:03
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2002.09.18 05:26
      hsr/////////////////////////////////////////////////// 아래 말씀하신 포멧류의 함수를 사용하시면 편...
    • 바다를향해
      2002.09.18 01:32
      Edit1.Text := Format('%.2f', [123.23232]); 이렇게 쓰면 되지 않나여..^^ 즐프.............^^;;
    • KDDG_ZZOM
      2002.09.18 01:24
      팁란인가? 타락천사님이 올리신 팁이 있는것 같았어요... 반올림하는거하고 절삭하는게 쪼매 이상해서... ...
    • 김상수
    • 2002.09.18 00:34
    • 0 COMMENTS
    • /
    • 0 LIKES
    • Ace..
    • 2002.09.18 00:26
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 전형식
      2002.09.18 02:09
      안녕하세요. ComobBox의 Item속성은 TStringList랑 같습니다. 선택했을때 선택한값에 추가하고싶으시면...
    • Ace..
      2002.09.18 02:31
      감사드립니다 저는 cb1.Text 의 값을 그냥  가지고 있고 싶거든요. 해서 cb1.Text := cb1.Text...
    • 한원희
      2002.09.18 03:25
      안녕하세요. 한원희입니다. 콤보박스의 스타일을 어떤 것으로 설정하셨는지 궁금합니다. csDropDownLis...
    • Ace..
      2002.09.19 00:35
      원희님 말씀처럼 해봤는데..... 이벤트처리중에 DropDown 이벤트 에서는 변수에 Text를 저장 하고요 Cl...
    • 이영동
    • 2002.09.18 00:14
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2002.09.18 00:24
      hsr////////////////////////////////////////////////// 간단하게 form2 디자인시 visible을 false 하거...