|
으흐흐.. ^^ 우선 감사의 말씀 전합니다. 감똬.~~
^^
넹.. flength라는 함수는 아직 쓰지 않았습니다.
그리고 1바이트 읽어 1바이트 쓰는 방법을 썼는데요..
4바이트씩 읽게해서 해봤는데 용량이 정량보다 초과되서 저장이 되더군요..
4바이트씩 읽어서 원 파일 크기만큼 저장되는 방법은 ?? 알고리즘인가요?
걍 물러바씀미다 ^^ 감솨드리구여.. 즐프하세여 ^^ 아참.. 휴가시랬죠? ^^
좋은 휴가되시길.. 저처럼 비오는날 잡지 않으셨길.. ㅋㅋ ^^;
아~ 날씨 저타~
Moony 님이 쓰신 글 :
: 음... 씨언어의 기본내용을 많이 잊으신듯 싶군요...
:
: 메모리에 관련된 내용은 특히나 포인터를 쓸때 아주 예민한 부분이므로
:
: 잊었다 하더라도 다시 리뷰를 하셔야 프로그래밍 하는데 도움이 될 것입니다...
:
: 우선 소스상의 약간 수정되면 좋을 부분에 대한 말씀을 드리죠...
:
: 파일의 길이를 얻기 위해 fseek으로 파일포인터를 마지막으로 보내고 ftell로 오프셋
:
: 값을 얻은후에 fseek으로 다시 원점으로 되돌리셨는데 flength 던가 라는 함수가
:
: 있습니다...
:
: 그리고 파일을 옮기기 위해 사용하신 다음 문장에서
:
: while(i <= length)
: {
: ld = fread(buf, strlen(buf)+1, 1, of);
: wd = fwrite(buf, strlen(buf)+1, 1, sf);
: i = i = ld;
: }
:
: 이 문장 전에 buf의 메모리를 할당해주셔도 되고 이런 경우 아예 배열로 잡아도
:
: 상관없겠죠...
:
: 즉, buf = (char *)malloc( 원하는 바이트수 ); 라는 문장을 저 루프문 위에다
:
: 써주시면 되겠고 다음 부분을
:
: ld = fread(buf, strlen(buf)+1, 1, of);
: wd = fwrite(buf, strlen(buf)+1, 1, sf);
: i = i = ld;
:
: 이렇게 고쳐야 하겠네요...
:
: ld = fread(buf, 원하는 바이트수 , 1, of);
: wd = fwrite(buf, 원하는 바이트수 , 1, sf);
: i = i + ld;
:
: 참... i 선언하셨을 때 0으로 셋팅해주셔야 겠죠?
:
: 다쓰고 난 다음 free(buf); 잊지 마시구요...
:
:
: 수야 님이 쓰신 글 :
: : 안녕하세요..
: :
: : 또.. 꼼지락.수야랍니다 ㅡ.ㅡ
: :
: : alloc를 사용할려고 하는데요... 어디서 어떻게 사용해야하는지를 모르겠습니다. ㅡ.ㅡ
: :
: : 고2때 하고 6년지난 지금 한번도 안써봐서 ㅡ.ㅡ
: :
: : 도무지 기억이 ㅡ.ㅡ ( 흑.. 나이가 ㅠ_ㅠ )
: :
: : 아래 소스상에 어디에 어떻게 써야하는지좀 알려주세요
: :
: : : : 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);
: : : : }
: : : : }
: : : : //---------------------------------------------------------------------------
|