[질문] fread, fwrite, fseek, ftell 이용하여 한글 읽기?

hurryon의 이미지

환경은 선 2.7 배쉬셀 그리고 gcc 2.95 입니다.

텍스트 파일에서 라인단위로 읽어 들여 필요한 내용을 변수로 만들었습니다.
본래 최종 목적은 텍스트 파일을 디비에 넣기 위해 가공을 하는 것인데
지금은 중간단계로 작업을 하고 있습니다.

어쨌든 첫라인만 읽어 들여서 화면에도 출력을 해보고 파일로 저장을 해 보았
지만 이상하게 한글이 깨져서 출력되거나 파일에 저장이 됩니다. 영문이나
숫자는 제대로 되는것 같은데...

소스와 실행결과는 다음과 같습니다.

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    FILE *in, *out;

    char sequence[20];
    char content1[60], content2[40];
    char etc[40];

    char line_buffer[300];

    memset(sequence, 0x00, 20);
    memset(etc, 0x00, 40);
    memset(content1, 0x00, 60);
    memset(content2, 0x00, 40);
    memset(line_buffer, 0x00, 300);

    if(argc != 3)
    {
        fprintf(stderr, "File Open Error\n");
        exit(1);
    }

    if((in = fopen(argv[1], "r")) == NULL)
    {
        fprintf(stderr, "Input File Open Error\n");
        exit(1);
    }

    if((out = fopen(argv[2], "w")) == NULL)
    {
        fprintf(stderr, "Output File Open Error\n");
        exit(1);
    }

    fread(sequence, 13, 1, in);
    printf("%s\n", sequence);

    fseek(in, 1, 1);
    printf("%ld\n", ftell(in));

    fread(etc, 39, 1, in);
    printf("%s\n", etc);

    fseek(in, 3, 1);
    printf("%ld\n", ftell(in));

    fread(content1, 59, 1, in);
    printf("%s\n", content1);

    fseek(in, 1, 1);
    printf("%ld\n", ftell(in));

    fread(content2, 40, 1, in);
    printf("%s\n", content2);

    fprintf(out, "%s %s %s %s\n", sequence, etc, content1, content2);

    fclose(in);
    fclose(out);

    return(0);
}


nscode:~/work/saup/work$ make
make: `insert_db' is up to date.
nscode:~/work/saup/work$ ./insert_db test.txt out
1106053014051
14
¿¿&IPC
56
μ&¾÷
116
¤°&Á&                                  7μ&¾÷
nscode:~/work/saup/work$ cat out
1106053014051 ¿¿&IPC                                  μ&¾÷                                                       ¤°&Á&                                  7μ&¾÷
nscode:~/work/saup/work$

혹시 한글 처리하는데 특별한 무엇이 필요한지요? ㅡ.ㅡ?

cdpark의 이미지

fread로 읽은 값은 NULL로 끝나지 않습니다. 바로 printf로 찍을 수 없습니다.

그리고 test.txt 파일 내용은 어떻게 되는지요?

envy100의 이미지

전 선 5.8에서 해봤는데요
한글이 나와요 단지 한글이 2바이트라서 홀수로 읽는 경우만 깨져서 나오고 다른건 잘나오던데요

:/export/itap/MPread/temp:211 % insert hangul.txt han
한글이 나오는
14
?테스트 하는거에요...
39

40

그런데요 sequence가 초기화 되고 13문자만 읽으니까 null을 안 넣어줘두 되는거 아닌가요??

위님의 답변에서 궁금해서요

도전하라

codebank의 이미지

한글처리에는 특별한 방법은 없는걸로 알고 있습니다.
다만 한글이 출력되는곳은 터미널이니 터미널에서 한글이 출력되는지를 확인하는
것이 중요하겠죠.
또한 입력된 파일의 형식입니다.
보통 Unix쪽에서 MS-Windows에서 작성된 일반 Text파일을 가끔 읽지 못하는
경향이 있습니다.
그 이유는 MS OS쪽에 있는데 MS OS에서는 자체적으로 정해버린 확장완성형을
이용해서 한글을 출력시키고 있습니다.
즉, 기존 KSC-5601의 2356자인가의 완성형으로 표현되지 않는 한글들을 사내
규칙에의해 확장완성이라는 이름으로 만들어놓고 그것을 이용해서 한글을 출력시
키므로 완성형이외의 확장완성에 포함된 글자는 표현이 불가능할 수도 있습니다.
그런데 문제를 가만히보니까 확장완성보다는 터미널의 한글출력쪽에 조금 의심이
갑니다.
읽어들인 연습용 Text파일이 무언지를 먼저 올려보시는게 좋겠네요.

------------------------------
좋은 하루 되세요.

hurryon의 이미지

답변 해 주신 내용 덕분에 몇가지는 해결이 된 듯합니다. 마지막이 널로
끝나지 않아서 출력이 제대로 되지 않는다고 하셨는데...문자열의 길이을
리턴해서 마지막에 널을 추가해 주면 제대로 될까요?

두번째 답변해 주신 분의 말씀데로 짝수로 데이터을 읽어 들이니 한글이
원만하게 출력이 되지만은 한글과 영문이 같이 있는 경우(위의 소스에서
etc 변수에 들어 가 있는 경우)는 잘 나오지 않네요. 널을 추가하면 될
까요? 넣을 추가해 보기 위해서 strlen 을 써 보니 fread을 이용해서
읽어 들인 만큼의 길이가 나와 버리네요.

변경한 소스와 입력 파일입니다.

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    FILE *in, *out;

    char sequence[20];
    char content1[60], content2[40];
    char etc[40];

    char line_buffer[300];

    int len;

    memset(sequence, 0x00, 20);
    memset(etc, 0x00, 40);
    memset(content1, 0x00, 60);
    memset(content2, 0x00, 40);
    memset(line_buffer, 0x00, 300);

    if(argc != 3)
    {
        fprintf(stderr, "File Open Error\n");
        exit(1);
    }

    if((in = fopen(argv[1], "r")) == NULL)
    {
        fprintf(stderr, "Input File Open Error\n");
        exit(1);
    }

    if((out = fopen(argv[2], "w")) == NULL)
    {
        fprintf(stderr, "Output File Open Error\n");
        exit(1);
    }

    fread(sequence, 13, 1, in);
    printf("%s\n", sequence);

    fseek(in, 1L, 1);
    printf("%ld\n", ftell(in));

    fread(etc, 38, 1, in);
    printf("etc len: %d\n", strlen(etc));
    printf("%s\n", etc);

    fseek(in, 3L, 1);
    printf("%ld\n", ftell(in));

    fread(content1, 58, 1, in);
    printf("%s\n", content1);

    fseek(in, 1L, 1);
    printf("%ld\n", ftell(in));

    fread(content2, 40, 1, in);
    printf("%s\n", content2);

    fprintf(out, "%s %s %s %s\n", sequence, etc, content1, content2);

    fclose(in);
    fclose(out);

    return(0);
}


nscode:~/work/saup/work$ ./insert_db test.txt out
1106053014051
14
etc len: 38
¿¿&IPC
55
Àμ&¾÷
114
 ±¤°&Á&                                 Àμ&¾÷
nscode:~/work/saup/work$

입력 데이터는 다음과 같습니다. 라인수가 많아서 몇라인만 올립니다.

nscode:~/work/saup/work$ head test.txt
1106053014051&¿¿&IPC                                 11Àμ&¾÷                                                      ±¤°&Á&                                  74510   11
1106053015003¼¼¿&¸Þ&ðÄà                              12ÀÇ·&¿&±¸ Á&ÀÛ                                               &&´&°& ü¾×¹&Ã&°&                       24230   30
1106053015002´&¿&°Ç¼³                                12°Ç¼³                                                        ¿ÀÇǽºÅÚ                                45221    8
1106053015001SONY¼­º&½º                              11¼Ò´ÏÁ&Ç°ÆǸŠ¼­º&½º                                         ÆǸŠ¼&¸&                               92310    9
1106053015004Áß¾ÓÁ¤Ç&¿Ü°&                            11º´¿ø                                                        ³&°& ¿Ü°& Á¤Ç&¿Ü°&                      85121   13
1106053015005Áø¿øÁ&°&±&°&                            11¼­º&½º(±&°&)                                                Á&°&±&°&(À&È°¿&)                        52709    2
1106053015006°Ç¿&³Ã&¿ÇÁ·&Æ&                          12³Ã&¿±&°&&&¸Å                                                ³Ã&¿±&°&                                51899    3
1106053015008¿&ÀÏ°ø¾÷&&                              11¸&¾Ï±& Á&Á¶¾÷                                               Æ&·&½º ¾&Ç° Á&Á¶                        31102    2
1106053015009°æ¿ø±&°&                                11Àμ&±&°&Á&ÀÛ                                                Àμ&±&°&                                29393    3
1106053015010ÀÚÇÇ·Î(ÁÖ)                              11½Å¹ßºÎ¼ÓÇ°Á&Á¶                                              ±¸&ÎƲ                                  19301    7
nscode:~/work/saup/work$

으흠. 잘 해결해야 할텐데요.

:-)

hurryon의 이미지

음냐. 입력 데이터을 올리고 나니 이상하네요.

일단은 터미널 상에서는 한글이 잘 나오는데...오려 붙이기을 해서 이곳에
올리니 한글이 모두 깨져 버리네요.

T.T

터미널 환경은 다음과 같습니다.

nscode:~/work/saup/work$ export
declare -x HOME="/users/hurryon"
declare -x HOSTNAME="nscode"
declare -x HOSTTYPE="sparc"
declare -x HZ="100"
declare -x LANG="ko"
declare -x LD_LIBRARY_PATH="/usr/lib:/usr/local/lib:/usr/local/mysql/lib/mysql:/users/hurryon/lib"
declare -x LOGNAME="hurryon"
declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jpg=01;35:*.png=01;35:*.gif=01;35:*.bmp=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.png=01;35:*.mpg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:"
declare -x MACHTYPE="sparc-sun-solaris2.7"
declare -x MAIL="/var/mail/hurryon"
declare -x MANPATH="/users/hurryon/man"
declare -x OSTYPE="solaris2.7"
declare -x PATH="/users/hurryon/bin:/users/hurryon/bin:/usr/bin::/usr/bin:/usr/ucb:/etc:/usr/local/bin:/usr/ccs/bin:/usr/local/mysql/bin:/usr/local/apache/bin:/usr/local/bin:/usr/ccs/bin:/usr/local/mysql/bin:/usr/local/apache/bin"
declare -x PS1="\\h:\\w\$ "
declare -x PWD="/users/hurryon/work/saup/work"
declare -x SHELL="/usr/local/bin/bash"
declare -x SHLVL="2"
declare -x STY="2121.pts-1.nscode"
declare -x TERM="xterm"
declare -x TERMCAP="SC|vt100|VT 100/ANSI X3.64 virtual terminal:\\\
:DO=\\E[%dB:LE=\\E[%dD:RI=\\E[%dC:UP=\\E[%dA:bs:bt=\\E[Z:\\\
:cd=\\E[J:ce=\\E[K:cl=\\E[H\\E[J:cm=\\E[%i%d;%dH:ct=\\E[3g:\\\
:do=^J:nd=\\E[C:pt:rc=\\E8:rs=\\Ec:sc=\\E7:st=\\EH:up=\\EM:\\\
:le=^H:bl=^G:cr=^M:it#8:ho=\\E[H:nw=\\EE:ta=^I:is=\\E)0:\\\
:li#55:co#126:am:xn:xv:LP:sr=\\EM:al=\\E[L:AL=\\E[%dL:\\\
:cs=\\E[%i%d;%dr:dl=\\E[M:DL=\\E[%dM:dc=\\E[P:DC=\\E[%dP:\\\
:im=\\E[4h:ei=\\E[4l:mi:IC=\\E[%d@:ks=\\E[?1h\\E=:\\\
:ke=\\E[?1l\\E>:vi=\\E[?25l:ve=\\E[34h\\E[?25h:vs=\\E[34l:\\\
:us=\\E[4m:ue=\\E[24m:so=\\E[3m:se=\\E[23m:mb=\\E[5m:\\\
:md=\\E[1m:mr=\\E[7m:me=\\E[m:ms:\\\
:Co#8:pa#64:AF=\\E[3%dm:AB=\\E[4%dm:op=\\E[39;49m:AX:G0:\\\
:as=\\E(0:ae=\\E(B:\\\
:ac=\\140\\140aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~..--++,,hhII00:\\\
:k0=\\E[10~:k1=\\EOP:k2=\\EOQ:k3=\\EOR:k4=\\EOS:k5=\\E[15~:\\\
:k6=\\E[17~:k7=\\E[18~:k8=\\E[19~:k9=\\E[20~:k;=\\E[21~:\\\
:F1=\\E[23~:F2=\\E[24~:kb=^H:K1=\\EOq:K2=\\EOr:K3=\\EOs:\\\
:K4=\\EOp:K5=\\EOn:kh=\\E[1~:kH=\\E[4~:kN=\\E[6~:kP=\\E[5~:\\\
:kI=\\E[2~:kD=\\E[3~:ku=\\EOA:kd=\\EOB:kr=\\EOC:kl=\\EOD:km:"
declare -x TZ="ROK"
declare -x WINDOW="0"
declare -x _INIT_PREV_LEVEL="S"
declare -x _INIT_RUN_LEVEL="3"
declare -x _INIT_RUN_NPREV="0"
declare -x _INIT_UTS_ISA="sparc"
declare -x _INIT_UTS_MACHINE="sun4u"
declare -x _INIT_UTS_NODENAME="nscode"
declare -x _INIT_UTS_PLATFORM="SUNW,Ultra-250"
declare -x _INIT_UTS_RELEASE="5.7"
declare -x _INIT_UTS_SYSNAME="SunOS"
declare -x _INIT_UTS_VERSION="Generic_106541-15"

셸은 배쉬을 사용하고 있고요. 그리고 입력 데이터는 다른 부서에서 올라오는
것인데 아마도 윈도쪽에서 작업한 파일입니다. 텍스트로 작업을 했는지
혹은 아래한글이나 워드로 작성해서 변경한 텍스트인지 확인해 보겠습니다.

hurryon의 이미지

문제점이 3가지였던것 같습니다.

1번째는 한글을 읽어 들일때 짝수로 읽어 들여야 한다는것. 이건 해결.
2번째는 마지막에 널을 추가해 주어야 한다는 답변 글이 있었는데 이걸 미해결
3번째는 한글을 오려 붙이니 왜 깨질까요? putty 을 사용합니다만.

마지막으로 수정된 소스는 다음과 같습니다.

    fread(sequence, 13, 1, in);
    printf("%s\n", sequence);

//  fseek(in, 1L, 1);
    printf("%ld\n", ftell(in));

    fread(etc, 38, 1, in);
    printf("etc len: %d\n", strlen(etc));
    printf("%s\n", etc);

    fseek(in, 3L, 1);
    printf("%ld\n", ftell(in));

    fread(content1, 58, 1, in);
    printf("%s\n", content1);

    fseek(in, 1L, 1);
    printf("%ld\n", ftell(in));

    fread(content2, 40, 1, in);

주석처리을 하나 추가하니 잘 되네요. 제 생각으론 13바이트까지 읽어
들이고 14바이트부터 읽어야 하는데...으흠...

^^;;

hurryon의 이미지

위의 소스을 이용해 문자열을 처리을 했습니다만 while(fgets ... )와 비슷하게
처리을 할수 있을줄 알았는데. 아니네요.

ㅡ.ㅡ;;

현재라인에서 작업을 다 하고 다음 라인을 읽어 들여야 할텐데...
fread을 이용해서 다음 라인의 처음으로 이동하려면 어떤식으로
작업해야 하는지요?

moonzoo의 이미지

일단 끝에 널을 추가하실 필요는 없습니다..

버퍼을 처음에 memset을 이용해서 null로 초기화 시켰기 때문에

예를 들어 50byte초기화 하고 49바이트만 채워넣었다면

당연히 마지막 byte는 null이 그대로 있겠지요..

그러니 null을 추가하실 필요는 없고요..

===========================

fseek, ftell등을 쓰셨는데..굳이 쓰실필요가 없다고 생각됩니다.

입력 txt파일이 당연히 정해진 포맷이 있을텐데..

예를 들면

=========================================
sequence(20 = etc(30) = content(30)
=========================================

()은 byte수를 말하는 거구요..

위와 같은 형식의 입력 txt파일이 있다면

걍 fread(.., 20,..) , freaa(..,30,..) , fread(..,30,..)

이렇게 하시면 되구여..

끝까지 다 읽었으므로 다음라인으로 넘어므로 위의 fread를 똑같이

반복해주시면 될 듯 합니다.

hurryon의 이미지

으흠...제목과 같이 현재라인의 처음으로 파일 포인터을 이동시켜야 하는
이유가 있습니다.

위에 글을 남겨 주신분의 말씀데로

시퀀스는 1컬럼부터 13바이트
etc는 14컬럼부터 38바이트
내용1은 56컬럼부터 58바이트
내용2는 116컬럼부터 48바이트

을 입력 받아야 합니다. 하지만 문제는 각각의 사이에 몇가지 불필요한 부분이
있기때문에 fseek을 이용해서 이동을하고 ftell로 확인을 해본것이였습니다.

     while(!feof(in))
    {
        fread(sequence, 13, 1, in);
        fread(etc, 38, 1, in);
        fseek(in, 4L, 1);
        fread(content1, 58, 1, in);
        fseek(in, 2L, 1);
        fread(content2, 41, 1, in);
        fseek(in, 10L, 1);

        fprintf(out, "%s,%s,%s,%s\n", sequence, etc, content1, content2);
        printf("%s,%s,%s,%s\n", sequence, etc, content1, content2);

        getchar();
    }

위와 같이 whlie 을 돌리니 자동으로 다음 라인으로 넘어가긴 하지만
이상하게 무한루프가 돌고 있는것 같습니다. 마지막 라인이 계속해서
저장이 되네요.

에휴...참고로...제가 근무하는 곳은 오늘, 내일 보안감사가 있다고 해서
개인피씨는 모두 창고나 집으로...ㅋㅋ...덕분에 후진 컴퓨터에서 작업하려니
힘드네요.

:-)

moonzoo의 이미지

마지막 라인이 계속 저장되는 것이 아니라..

마지막 라인을 읽고도 while문을 못 빠져 나오는 것 같군여.

그래서 마지막에 저장된 값들이 , 계속해서 찍히는 것 같은데요..

feof가 제대로 안 먹히는 듯..

hurryon의 이미지

while 의 마지막에 사용한 fseek 덕분에 계속해서 파일 포인터가 변경되니
파일의 끝을 찾지 못하더군요.

에휴...미해결 상태입니다.

moonzoo의 이미지

char buff[1024];

while( (rt = fread( buff ,LINE_LEN, 1 , fp)) > 0)
{
   memcpy(sequence, buff, 13);
   sequence[13] = 0; /* null */

   memcpy(etc, buff+13, 38);
   etc[38] = 0;
   
    ...... 

}

위와 같이 buff를 써서 한 라인을 LINE_LEN(라인의 전체 길이) 만큼

읽은 후에 각 변수에(sequence등등) 에 memcpy등을 써서 나누어

주셔도 될듯 하네여..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.