|
파일명을 입력하실때 확장자까지 입력을 하지 않고 아래 Filter에 의존하신다면
DefaultExt 프로퍼티를 채워주셔야 합니다. 확장자가 붙고 안붙고에 해당하는 다른 옵션은
없는것으로 알고 있습니다.
cuperido
김준원 님이 쓰신 글 :
: 아마도 마지막으로 질문 한가지만 더 하겟습니다 ㅡㅡ;;;;
: SaveDialog->FileName.c_str() 한 것에서.... 확장자가 분명 지정 되어있음에도 불구하고 확장자가 안들어가는 사태가 벌어졌습니다.
:
: 확장자 같이 넣으려면 따로 뭔가를 해줘야 되나요?
:
:
: 유영인 Cuperido 님이 쓰신 글 :
: : fiHandle = fopen(SaveDialog->FileName.c_str(), "wb");
: : 이렇게 해주시면 됩니다.
: :
: : 참고로 SaveDialog->Execute() 하실때 리턴값이 참이 아니면,
: : 사용자가 Cancel한 것을 의미합니다.
: :
: :
: : cuperido
: :
: :
: : 김준원 님이 쓰신 글 :
: : : 갑자기 문제가 생겨버렸습니다.
: : : fiHandle = fopen("C:\\DOWNLOAD\\TEST.DAT", "wb");
: : : 이 부분에서 "C:\\DOWNLOAD\\TEST.DAT"
: : : 이 값을 SaveDialog 에서 받아온 값으로 넣어주려면 어떻게 해야되나요????
: : : ㅡ,.ㅡ;;;a
: : :
: : :
: : : 유영인 Cuperido 님이 쓰신 글 :
: : : : 아무래도, 저장때 사용하신 메소드가 잘못되었거나, 아니면 제가 생각하고 있는 ASCII와
: : : : HEX 개념이 준원님과 달라서 착오를 일으키는것 같습니다.
: : : :
: : : : 우선 아래 두가지 방법의 예시를 보시고 원하시는 방법이 있으신지 찾아보기시 바랍니다.
: : : :
: : : : 첫번째 함수 (Button1Click)는, 준원님 말씀대로 0, 1 을 넣으면 Hex 코드로 0, 1 을 넣는
: : : : 코드입니다. 실질적으로 Hex 값이 01, 01 로 출력됩니다.
: : : :
: : : : 두번째 함수 (Button2Click)는, 9를 입력하면 나오는 2진수 값이 1001 인데, 이것을 맵핑시켜서
: : : : Hex 코드로 10, 01 을 넣는 예제입니다.
: : : :
: : : : 또한, char 형이나 int 형등을 그냥 저장시키면 자동으로 Hex 값으로 바뀌어 저장됩니다.
: : : : (단, CPU에 따라서 저장 순서는 바뀝니다. IBM계열은 뒤쪽에서 앞쪽으로 변환되고 홀수로
: : : : 남은 자리수는 0으로 채웁니다)
: : : :
: : : :
: : : : cuperido
: : : :
: : : : //---------------------------------------------------------------------------
: : : :
: : : : #include <vcl.h>
: : : : #include <stdio.h>
: : : : #pragma hdrstop
: : : :
: : : : #include "Unit1.h"
: : : :
: : : : //---------------------------------------------------------------------------
: : : :
: : : : #pragma package(smart_init)
: : : : #pragma resource "*.dfm"
: : : :
: : : : TForm1 *Form1;
: : : :
: : : : //---------------------------------------------------------------------------
: : : : __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
: : : : {
: : : : }
: : : :
: : : : //---------------------------------------------------------------------------
: : : :
: : : : void __fastcall TForm1::Button1Click(TObject *Sender)
: : : : {
: : : :
: : : : FILE *fiHandle;
: : : : char temp[2];
: : : :
: : : : temp[0] = 1;
: : : : temp[1] = 2;
: : : :
: : : : fiHandle = fopen("C:\\DOWNLOAD\\TEST.DAT", "wb");
: : : : fputc(temp[0], fiHandle);
: : : : fputc(temp[1], fiHandle);
: : : : fclose(fiHandle);
: : : :
: : : : }
: : : : //---------------------------------------------------------------------------
: : : :
: : : : void __fastcall TForm1::Button2Click(TObject *Sender)
: : : : {
: : : :
: : : : unsigned char chTest, chHiBit, chLowBit;
: : : : char caBin[10];
: : : : FILE *fiHandle;
: : : : int itCount;
: : : :
: : : :
: : : : chTest = 9;
: : : :
: : : : ultoa(chTest, caBin, 2);
: : : :
: : : : // 홀수로 끝나면 앞에 0을 붙여 짝수로 채워줌
: : : : if(strlen(caBin) % 2) {
: : : : memcpy(&caBin[1], caBin, strlen(caBin) + 1);
: : : : caBin[0] = '0';
: : : : }
: : : :
: : : :
: : : : fiHandle = fopen("C:\\DOWNLOAD\\TEST.DAT", "wb");
: : : :
: : : : for(itCount = 0; itCount < strlen(caBin); itCount += 2) {
: : : : chHiBit = caBin[itCount] == '1' ? 1 : 0;
: : : : chLowBit = caBin[itCount + 1] == '1' ? 1 : 0;
: : : :
: : : : fputc((chHiBit << 4) + chLowBit, fiHandle);
: : : : }
: : : :
: : : : fclose(fiHandle);
: : : :
: : : : }
: : : : //---------------------------------------------------------------------------
: : : :
: : : :
: : : : 김준원 님이 쓰신 글 :
: : : : : 흠... 만약에 문자배열에 char 타입의 변수에 수치를 넣어줘서 저장이 된다면 그것을 그냥 그대로 쓰는것도 가능하지만....
: : : : :
: : : : : 문제는 이겁니다...
: : : : :
: : : : : char temp[2];
: : : : :
: : : : : temp[0] = 1;
: : : : : temp[1] = 2;
: : : : :
: : : : : 이라고 한 뒤에
: : : : : 이것을 저장하면 말 그대로
: : : : :
: : : : : 헥사 에디터 같은 툴을 이용하여 내부 파일에 값을 보면
: : : : :
: : : : : 01 02 가 나와야 정상인데.....
: : : : :
: : : : : 어떤 이유에서인지 Borland 쪽에서는
: : : : : 1과 2 를 바로 char 타입의 글자 1 2 로 처리를 해버리더군요....
: : : : :
: : : : : 이 부분에서의 문제는 어떻게 해결을 해야되는가요???
: : : : :
: : : : : 값의 지정이야 바이너리값을 넣어주면... 연산을 통해서 8 비트 단위로 쪼개주면 잘 들어가겟지만....
: : : : :
: : : : : 이상하게 ㅡㅡ;;; 1 같은 숫자를 수치로 먹지 않고 글자로 먹어버리는 난감한 상황에 어찌 프로그래밍 해야 될지 잘 모르겟습니다.
: : : : :
: : : : : 이런 저런것 답변 매우 감사드리며 이번 것도 답변 주시길 바라는.... -ㅂ-)b
: : : : :
: : : : :
: : : : :
: : : : :
: : : : : 유영인 Cuperido 님이 쓰신 글 :
: : : : : : 약간은 어쩌면 비트 연산과 파일 입출력에 관한 이슈는 서로 개별적인 사항입니다.
: : : : : :
: : : : : : bitset은 비트 연산에 관한 템플릿으로 기본적으로 빌더 내에서도 제공하고 있지만,
: : : : : : 이 사항이 파일 입출력과 직접 연관이 있다고 보기에는 힘듭니다.
: : : : : :
: : : : : : 만약, 준원님께서 원하시는 대로 파일을 비트대로 읽고 쓰는 루틴을 물론, 구현을 할수는
: : : : : : 있을 것입니다. (전에 말씀드린 방법대로)
: : : : : :
: : : : : : 하지만, 이것은 퍼포먼스를 상당히 떨어트리는 구조가 되겠지요. 제가 이제까지 경험한 바로는
: : : : : : IBM-PC상에서는 파일 입출력을 Bit단위로 하지는 않습니다.
: : : : : :
: : : : : : 따라서, 다시 제안을 드리자면, 비트 단위는 메모리에서 처리하시고, 파일 입출력은 바이트
: : : : : : 단위로 하셔서 메모리 단에서 적절히 처리하여 퍼포먼스를 높이는 방법을 택하시는 것이
: : : : : : 가장 효율적일것 같다. 라는 말씀입니다. :)
: : : : : :
: : : : : :
: : : : : : cuperido
: : : : : :
: : : : : :
: : : : : :
: : : : : : 김준원 님이 쓰신 글 :
: : : : : : : 이런 저런것들에 대해서 알아보니... bitset 이라는 것이 있더군요!
: : : : : : :
: : : : : : : 혹시 이것에 대해서 아시는지요???
: : : : : : :
: : : : : : : bitset은 형태가 어찌 다른건지요??? 내부 데이터의 접근과 파일로의 저장은 어떤 식으로 해야되는지요?
: : : : : : :
: : : : : : : 유영인 Cuperido 님이 쓰신 글 :
: : : : : : : : 파일 입 출력은 무조건 Byte 단위로 이루어집니다.
: : : : : : : : Bit 단위로 입출력을 하는 것은 현재 바이트를 읽어서 비트 연산을 한후 다시
: : : : : : : : 그 연산된 바이트를 기록 하는 방법밖에는 없습니다
: : : : : : : :
: : : : : : : : 압축 프로그램등이 비트 단위로 연산이 이루어지는데, 이 역시 바이트 단위로
: : : : : : : : 쭉 읽어들인다음 비트 연산을 다시 하는 방법을 사용하고 있습니다.
: : : : : : : :
: : : : : : : :
: : : : : : : : cuperido
: : : : : : : :
: : : : : : : : 김준원 님이 쓰신 글 :
: : : : : : : : : 바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!!
: : : : : : : : :
: : : : : : : : : 무슨 소리냐? 하시는 분 계실지 모르겟습니다...
: : : : : : : : :
: : : : : : : : : 흔히들 데이터 저장을 바이너리로 저장할때
: : : : : : : : :
: : : : : : : : : Char 사이즈 즉 8Bit 단위로들 저장을 하시거나 읽어오시는 경우가 있지 않습니까????
: : : : : : : : :
: : : : : : : : : 어디한번
: : : : : : : : :
: : : : : : : : : 진짜 무식하게
: : : : : : : : :
: : : : : : : : : 1bit 단위!!!
: : : : : : : : :
: : : : : : : : : 바이트 단위로!!!
: : : : : : : : :
: : : : : : : : : True False 단위로!!!
: : : : : : : : :
: : : : : : : : : 파일 읽기와 저장을 해보고 싶은데...
: : : : : : : : :
: : : : : : : : : OpenDialog 와 SaveDialog 를 이용하여 작업을 하려면 어찌 해야되는건가요????
: : : : : : : : :
: : : : : : : : : 이런 경우에 대해서 혹시 생각해보신분 계신가요???
|