|
SaveDialog1->Filter = "Code Files (*.bin)|*.BIN";
로 필터를 설정해준뒤
if(SaveDialog1->Execute())
로써 SaveDialog를 띄우고
fiHandle = fopen(SaveDialog1->FileName.c_str(), "wb");
로 저장 작업을 하면....
파일 이름 입력 부분에 따로 확장자를 입력해주지 않으면 그냥 확장자가 없는 파일이 되더군요...
혹시 필터 지정할때 그럼 뭔가가 빠져서 그런건가요????
void __fastcall TForm1::ButtonSaveClick(TObject *Sender)
{
SaveDialog1->Filter = "Code Files (*.bin)|*.BIN";
if(SaveDialog1->Execute())
{
FILE *fiHandle;
char RGBData[3];
RGBData[0] = 1;
RGBData[1] = 2;
RGBData[2] = 3;
fiHandle = fopen(SaveDialog1->FileName.c_str(), "wb");
//fiHandle = fopen("C:\\DOWNLOAD\\TEST.DAT", "wb");
fputc(RGBData[0], fiHandle);
fputc(RGBData[1], fiHandle);
fputc(RGBData[2], fiHandle);
fclose(fiHandle);
}
}
유영인 Cuperido 님이 쓰신 글 :
: DefaultExt 프로퍼티는 확장자를 붙이지 않을때 기본적으로 붙여줄 확장자 입니다.
: 실질적으로 파일이름을 확장자까지 전부 입력했음에도 불구하고 확장자 없이 저장이 된다는 것은
: 다른 문제인것 같습니다. SaveDialog를 사용하면서 아직까지 저에게는 그런 일이 없어서
: 이 부분에서는 정확한 답변을 드리지 못할것 같습니다.
:
:
: cuperido
:
: 김준원 님이 쓰신 글 :
: : Filter에 의존하여 파일명을 입력할때 확장자까지 입력한다면....
: : DefaultExt 프로퍼티의 값에 대한 설명이 Help 에 없는데...
: : 이것에 대한 설명도 부탁드립니다 ( ;ㅂ;)/
: :
: : 유영인 Cuperido 님이 쓰신 글 :
: : : 파일명을 입력하실때 확장자까지 입력을 하지 않고 아래 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 를 이용하여 작업을 하려면 어찌 해야되는건가요????
: : : : : : : : : : : :
: : : : : : : : : : : : 이런 경우에 대해서 혹시 생각해보신분 계신가요???
|