|
안녕하세요...
우선 여기서는 rb로 해도 상관이 없었습니다... 아무래도... rb가 아닌 다른곳의 문제였던것 같군요...
그리고 한 바이트씩 읽어서 쓰는 거니까 당연히 sizeof(char) 이렇게 했구요... sizeof(buf) 하면 포인터니까... 4바이트가 되지 않을까요...?
ld의 값은 한 바이트이니까... 역시 '1'이 되어 그냥 i++ 로 되었습니다.
while 문의 조건은 i < length 이고요...
그 외에는 고쳐진 부분은 없을 겁니다... 제가 직접 해 봐서 됐으니 별 이상이 없을 겁니다.
아... char *buf = new char; 이건... 아마 그냥 char 만 사용하므로 그냥 ... char *buf; 라 해도 될 듯 합니다... (저도 뒤에 delete 를 해주지 않았는데.. 해주는 게 났겠네요...^^)
참고로... rt로 열어서 wb로 저장하니까... 포맷이 달라지는 것 같은데요... 반드시 rb -> wb 가 되어야 원하는 결과가 나올 것 같습니다...
그럼... 즐넷하세요...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(OpenDialog1->Execute())
{
FILE *of, *sf;
char *buf = new char;
char *Fn;
long length;
int i = 0;
int ld = 0;
int wd = 0;
Fn = OpenDialog1->FileName.c_str();
if((of = fopen(Fn, "rb")) == NULL)
{
ShowMessage("Error Open LoadFile..");
return;
}
fseek(of, 0, SEEK_END);
length = ftell(of);
fseek(of, 0, SEEK_SET);
if((sf = fopen("d:\\S.mp3", "wb")) == NULL)
{
ShowMessage("Error Open SaveFile..");
return;
}
while ((i < length))
{
ld = fread(buf, sizeof(char), 1, of);
wd = fwrite(buf, sizeof(char), 1, sf);
i++;
}
StatusBar1->SimpleText = "Complite";
fclose(of);
fclose(sf);
}
}
그럼... 즐넷하세요...
수야 님이 쓰신 글 :
: 안녕하세요
:
: 허접질의 대명사 수야랍니다. ㅡㅡv
:
: fopen에 관한 질문인데요
:
: 일기전용 바이너리 파일로 오픈을 할려고 하는데 ab, a+b, rb, r+b, b 등 여러형식으로 해봤지만
:
: 오픈 에러가 납니다.
:
: rb는 오픈에러는 안나지만 fread때 CC3어쩌구저쩌구.DLL 이 어쩌구하는 멧시지가 뜹니다
:
: 소스 올릴테니까 이유점 알려주세요..
:
: 파일을 읽어서 *buf단위로 s.mp3라는 파일로 저장하는 것인데요..
:
: fopen같은 f시리즈로 무리가 있다면 open같은 다른 방법좀 부탁드립니다.
:
: stdio.h / string.h include했구요
:
: 아래는 소스입니다.
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: if(OpenDialog1->Execute())
: {
: FILE *of, *sf;
: char *buf;
: long length, i;
: int ld, wd;
: char *Fn;
:
: ld = 0;
: wd = 0;
: i = 0;
:
: Fn = OpenDialog1->FileName.c_str();
:
: if((of = fopen(Fn, "rt")) == NULL)
: {
: ShowMessage("Error Open LoadFile..");
: return;
: }
:
: if((sf = fopen("c:\\S.mp3", "wb")) == NULL)
: {
: ShowMessage("Error Open SaveFile..");
: return;
: }
:
: fseek(of, 0, SEEK_END);
: length = ftell(of);
: fseek(of, 0, SEEK_SET);
:
: while(i <= length)
: {
: ld = fread(buf, strlen(buf)+1, 1, of);
: wd = fwrite(buf, strlen(buf)+1, 1, sf);
: i = i = ld;
: }
:
: StatusBar1->SimpleText = "Complite";
:
: fclose(of);
: fclose(sf);
: }
: }
: //---------------------------------------------------------------------------
|