Q&A

  • 바이너리 파일을 읽어서 바이트 배열에 저장하고 싶습니다.
안녕하세요.

현재 제가 만들어야 하는 프로그램의 기능 중의 하나가

이진(바이너리) 파일을 읽어서 배열에 저장하고
이의 데이터를 시리얼 통신으로 날려줘야 합니다.<-요건 소스를 구해서 공부중입니다.

대부분의 글을 찾아보면 text문서위주로 쓰여 있어 바이너리 파일 다루는 법을
찾지 못했습니다.

덤으로 특정 파일명 예를 들어 ckfa.bin 파일이 있는지 없는지 확인하려면
이는 또 어떻게 해야 되는지 답변 부탁드리겠습니다.

요약하면
1. 특정파일명을 가진 파일이 현재 프로그램이 실행된 위치 혹은 특정 위치에 존재하는지
    판단하려면?
2. 위의 ckfa.bin파일을 지정한 배열에 저장하려면?
    유니코드 이런건 관계없습니다. 특정 하드웨어에서 동작하는 코드인지라...

입니다...

읽어주셔서 감사드리며 어떤 답변이든 고이 받아들여 생각하고 코딩해 보겠습니다.

추석이 코앞인데 즐거운 한가위 되시길 바랍니다.
5  COMMENTS
  • Profile
    석주현 2008.09.12 20:34
    1. FileExists(파일이름) 을 하시면 일단 파일이 존재 유무가 나옵니다.

    2. 경우는 정해진 포멧이 있다면 Record 타입을 만들어 읽어 들이는 게 좋고
    불특정 하다면 각 하나의 크기 만큼씩 읽어서 배열에 넣는 수 밖에 없을 것 같네요.
  • Profile
    이혁진 2008.09.12 20:52
    fileeq := FileExists(ckfa.bin);
    이렇게 하면 되는 걸까요? 자꾸 ckfa 가 선언되어 있지 않다고 나와서요...
  • Profile
    석주현 2008.09.12 20:54
    아래와 같은 식으로 읽어서 처리하시면 됩니다.

    <!--CodeS-->
    procedure TfrmMain.btn2Click(Sender: TObject);
    var
    F: file of Byte;
    tmpValue : Integer;
    begin
    AssignFile(F, 'c:\test.bin');
    Reset(F);

    try
    while not Eof(F) do
    begin
    BlockRead(F, tmpValue, SizeOf(Integer));
    // 여기에서 배열에 넣어 주시면 됩니다.
    end;
    finally
    CloseFile(F);
    end;
    end;
    <!--CodeE-->

    보통 하드웨어와 통신의 경우에는 리틀/빅 엔디안 도 좀 고려해 봐야 합니다.
    그리고 PC와 타입이 다를 경우가 많으니 꼭 확인 하시고 테스트 해보세요.

    그럼 수고 하시고 추석 잘 보내세요.
  • Profile
    석주현 2008.09.12 20:55
    파일이름을 집어 넣으시려면

    문자열이니

    fileeq := FileExists('ckfa.bin'); 이렇게 해주셔야 합니다.

    작은 따옴표를 좌우에 써주셔야죠.. ^^
  • Profile
    이혁진 2008.09.12 21:00
    FileEQ := FileExists('ckfa.bin'); 이렇게 해야 하는군요. 죄송합니다. ^^
    + 앗 벌써 댓글이 정말 감사합니다. 좀더 노력해보겠습니다.
    • 석주현
      2008.09.15 09:45
      http://www.delphi.co.kr/zboard/view.php?id=qanda&no=101769 최용일님의 답변을 참조 하셔서 만드시...
    • 과학상자
      2008.09.15 23:47
      흑..T.T 잘모르겠어요..ㅠㅠ 소나기님.. a.exe -a d:\program1\;d:\program2\ 이렇게 입력하면 그부...
    • 정선봉
      2008.09.13 02:57
      Windows Vista에서 드라이버 설치를 하려고 합니다. Xp에서는 설치가 잘 되었습니다. procedure TForm1...
    • 홍성락
      2008.09.13 01:21
      Image1.Picture := TData_My(vList.Items[0]).Image.Picture; 이렇게 하면 보일겁니다.
    • 이은주
      2008.09.13 08:39
      ㅎㅎ 그렇게 간단한 거군요 감사합니다.
    • 이혁진
    • 2008.09.12 20:19
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.09.12 20:34
      1. FileExists(파일이름) 을 하시면 일단 파일이 존재 유무가 나옵니다. 2. 경우는 정해진 포멧이 있...
    • 이혁진
      2008.09.12 20:52
      fileeq := FileExists(ckfa.bin); 이렇게 하면 되는 걸까요? 자꾸 ckfa 가 선언되어 있지 않다고 나와서...
    • 석주현
      2008.09.12 20:54
      아래와 같은 식으로 읽어서 처리하시면 됩니다. <!--CodeS--> procedure TfrmMain.btn2Click(S...
    • 석주현
      2008.09.12 20:55
      파일이름을 집어 넣으시려면 문자열이니 fileeq := FileExists('ckfa.bin'); 이렇게 해주셔야 합...
    • 이혁진
      2008.09.12 21:00
      FileEQ := FileExists('ckfa.bin'); 이렇게 해야 하는군요. 죄송합니다. ^^ + 앗 벌써 댓글이 정말 감사...
    • steps
      2008.09.12 04:40
      <!--CodeS--> AssignFile(FH, 'C:\test.txt'); Append(FH); While 검색시작일 <= 검색...
    • 홍성락
      2008.09.12 04:54
      화면이 잠긴다면 Application.ProcessMessages;와 Refresh를 적절히 사용하되 너무 자주도는 루틴에서는...
    • 이정욱
      2008.09.12 10:21
      프로그램 OnCreate 시 Assign및 Append 하고, 종료시 CloseFile을 해보세요. 아마 계속 호출 되다 보니,...
    • 허접플그래머
      2008.09.12 18:28
      답변 정말정말 감사드립니다. 다시 해보겠습니다. 명절 잘 보내세요 화이링^^
    • 이의성
    • 2008.09.11 22:59
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2008.09.12 11:26
      네... 그곳에 포함되어있지 않다면.. 없는 것 입니다..
    • 석주현
      2008.09.12 16:11
      KeyPress 이벤트에서 아래와 같이 입력을 숫자만 받는 방법이 있습니다. begin If Not (Key In ...
    • 이의성
      2008.09.12 19:29
      답변 감사합니다 ^^ 즐거운 명절 되세요~~
    • 소울해커
      2008.09.12 21:05
      XPMenu 라는 컴포넌트가 있습니다. 폼에다 던져 놓기만하면 말그대로 기본 컴포넌트들의 모습을 XP ...
    • 플루토
    • 2008.09.11 20:41
    • 2 COMMENTS
    • /
    • 0 LIKES
    • steps
      2008.09.11 21:01
      이미지파일의 확장자와 실제포맷이 일치하는가를 알자면 각 포맷의 헤더에서 식별자를 읽어내면 됩니다. ...
    • 플루토
      2008.09.12 01:04
      네, 감사합니다..^ ^
    • 석주현
      2008.09.10 21:12
      type SDLL_GetStatus = function(PSTATUS : Byte):boolean;stdcall; 저 같은 경우엔 이 Calling co...
    • 홍성락
      2008.09.10 21:29
      원형함수가 SDLL_API BOOL GetStatus(DT_STATUS *pStatus);이면 파라메다는 포인터형인거 같은데요. ....
    • 석주현
      2008.09.10 21:50
      전 저것도 못보고 Calling convention 부분만 생각하고 있었는데 진짜 그게 문제네요.. ^^ 아 창피해라.....
    • 신철우
      2008.09.10 22:03
      SDLL_GetStatus = function(PSTATUS : PSTATUS):boolean;stdcall; 에서 뭐가 잘못된건지? GetStatus(p...
    • 홍성락
      2008.09.10 22:36
      앗 실수...변수명과 형명이 같았네요.... ... type DT_STATUS = packed record bD...
    • 석주현
      2008.09.10 14:30
      TQuery 를 이용하여 SQL 쿼리 결과를 만들어서 DataSet 프로퍼티에 연결 하여 사용하면 됩니다.
    • 천천히
      2008.09.10 18:05
      소나기님..답변 감사드립니다... 그런데 데이터 행이 조회해서 여러개가 나왔는데 그걸 모두 qreport에...
    • 석주현
      2008.09.10 21:02
      제 설명보다 델파이 디렉토리에 Demos에 보면 Quick Report에 관한 예제가 있습니다. 확인해 보세요. ...
    • 박동호
    • 2008.09.10 01:19
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2008.09.10 02:20
      소스내에서나 사용한 DLL등의 소스에서 SendMessage로 검색하세요. 아니면 띄어쓰기를 바꿔가며 WM_USER...
    • 석주현
      2008.09.10 05:55
      SendMessage 가 없다면 PostMessage 도 한번 찾아 보세요. 보통은 WM_USER + 10 이걸 그냥 안쓰고 다...
    • 신재민
    • 2008.09.09 13:51
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 강중규
    • 2008.09.07 04:56
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.09.08 16:21
      인스톨 실드 버젼이 틀린거 같아 정확히 말씀드리기 힘든데요. Application 의 dat 디렉토리를 그냥 ...
    • 정경철
    • 2008.09.06 06:22
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이창엽
    • 2008.09.05 23:54
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김동원
      2008.09.09 17:08
      MFC71.dll은 Microsoft VisualStudio 2003.Net 버전의 RTL 입니다. Microsoft VisualStudio 6.0이 설치...
    • 이창엽
      2008.09.11 01:38
      답변 감사합니다.. 패치문제 였네요...ㅠㅠ 한글 최신버전으로 패치하니깐 문제가 해결
    • 이의성
    • 2008.09.05 20:15
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 소울해커
      2008.09.05 22:05
      Win32 탭에 XPManifest 라는게 있는데 폼에 그냥 던져놓고 실행하면 비슷하게 나올겁니다. 개별적으로 ...
    • 이의성
      2008.09.05 22:18
      답변감사합니다~~ 그런데, Win32 탭에 XPManifest 라는게 없네요;; (Delphi6 입니다) ( 위쪽 모양이 깔...
    • 임형호
      2008.09.06 02:23
      위에껀 flatstyle 컴포넌트 같은데요. 기본컴포넌트를 저렇게 만드시는것보다는... 저런형태의 무료컴포...
    • 이의성
      2008.09.10 03:04
      감사합니다~~ 역시 요런 컴포넌트 있을거 같았는데 ^^;; 덕분에 정신건강에 많은 도움이 될 듯 싶습니...
    • 신철우
    • 2008.09.05 20:05
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.09.09 01:40
      잘되는데요. 아무래도 다른 문제 같습니다. 웹 브라우져에서 잘 열린다면 똑 같이 잘 열리는게 정상입니...
    • 소울해커
      2008.09.05 19:27
      Memo.Lines.SaveToFile('c:\rx.txt');
    • 김경석
      2008.09.06 16:11
      감사합니다.
    • steps
    • 2008.09.05 07:01
    • 1 COMMENTS
    • /
    • 0 LIKES
    • steps
      2008.09.05 23:51
      <!--CodeS--> AddFormField(`ImageSize0`, `100_80`); AddFormField(`ImageSize1` , `600_400`);...
    • steps
    • 2008.09.05 00:54
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2008.09.05 01:29
      KeyPreview속성을 True로 설정하세요. 그럼 폼이 먼저 메세지를 받습니다. 윈도우 메세지로 처리하는것...
    • steps
      2008.09.05 04:20
      최용일님 감사합니다. 그런데 폼에서도 마우스클릭시에 keyup 이벤트가 발생합니다. 제가 shift + clic...
    • 소울해커
      2008.09.05 05:06
      옛날에 좀 고민을 해봤었고 질문도 올려봤었는데 별다른 답변을 못들었던 부분입니다. 마우스를 눌렀는...
    • steps
      2008.09.05 06:35
      소울해커님 좋은 경험 잘 배웠습니다. 델파이건상수에 VK_LBUTTON, VK_RBUTTON, VK_MBUTTON 이 1, 2, 4 ...
    • 석주현
      2008.09.05 07:39
      TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble); 쉬프트 스...
    • 석주현
      2008.09.05 07:44
      어 해보니 진짜 Keyup에서만 이벤트가 발생하네요. 거참 하여간 해봐야 뭘 알겠으니 ㅠ_ㅠ
    • 이정욱
      2008.09.04 21:31
      TBitmap 의 Canvas 핸들로 엮어주시면 될거 같습니다. ^^