파일작업좀 봐주세요 고수님들부탁드립니다

jjjjrr의 이미지

안녕하세요
아래파일을 읽어서 글자가 깨어져나오는부분을 추출해서 다른파일로만들어야됩니다 그부분이 바이너리입니다
근데 이리저리해봐도 안됩니다
fgets로해봤는데 바이너리부분은 읽지를못합니다
그래서 fread 를이용해서 줄단위로 읽으려해도 안됩니다
혹시해서 char 를 byte로바꿔서해봐도 마찮가집니다
FILE* pFile;
pFile = fopen(filePath,"r+b");
size_t size;
byte line[1024];
char temp[1024];
int len,pos = 0;
while(size = fread(line,1024,1,pFile) > 0)
{ memcpy(temp , line , 1024);
len = strlen(temp);
char* p;
p = strtok(temp,"\n");
if(p != NULL)
{
pos += strlen(p) + 1;

}
else
{
pos += size*1024;
}

fseek(pFile,pos,SEEK_SET);
continue;
}
이렇게해봐도 fread 가 1024바이트식읽어야되는데
그리고나서 줄바꿈을 찿아서끊어읽어야되는데
fread가 1024바이트식 읽지를않고
딱 CWSO 여기까지많읽읍니다
근데
중간에 줄바꿈조작하는부분을 빼고
1024바이트식계속읽으면 바이너리부분도 읽어집니다
그러다가 줄바꿈하는부분만 넣으면
바이너리부분이 읽혀지지가 않읍니다
고수님들 한번살펴봐주십시요
다른방법이 있으면 부탁드립니다
한바이트식읽어서 하면 너무시간이 많이걸리구여
이것만가지고 보름째 삽질하고있읍니다
부탁합니다

-----------------------------7d4348153051e
Content-Disposition: form-data; name="before"

-----------------------------7d4348153051e
Content-Disposition: form-data; name="myfile"; filename="E:\플레시\다운로드\031014_b.txt"
Content-Type: application/octet-stream

CWSO x쐻U?W

faye의 이미지

뭐.. 질문하고는 직접 연관은 없지만..

CGI를 C로 하시나 봐요??

cgi 처리 C라이브러리는 찾기 어렵지 않습니다.. 대표적으로 qDecoder

참고해보세요..

도움이 되었으면 합니다.

dada의 이미지

바이너리 파일에 str~ 붙은 함수 쓰시면 안됩니다.
궂이, 줄단위로 자르지 마시고, 읽은만큼 그대로 파일에 써주시면 될듯 싶은데요.

jjjjrr의 이미지

줄단위로자르지않고
구분자를 알아내는방법이 있을까여
한바이트식읽어서 비교하는것은
파일의 용량이 몇백메가 정도되는파일을
한바이트식비교하려니
엄두가 안나서그런데여
위와같은경우는
구분자 -----------------------------7d4348153051e
의위치만 알아내면될것도같은데
이것을 모르겠읍니다

vuccell의 이미지

몇백메가되는 파일도 한바이트씩 비교하는데 아무문제 없습니다..

바이너리는 str함수를 쓰시면 안됩니다...
바이너리파일을 읽는데 \n 을 비교한다는 것 자체가 잘못되었습니다. 바이너리파일인지를 판단하는 함수를 하나 만드시고, 바이너리파일일 경우엔 따로 처리하도록 하시는게 좋을듯합니다.

저로서는 이미지파일같은 파일에 \n이 무슨 의미를 가지며, unicode 스트링으로 되어있는 MS WORD문서에서 저렇게 처리할 이유가 무엇인지 모르겠습니다.

vuccell의 이미지

CWSO <-- 이부분을 건너뛰고 읽으면 될듯한데요?

사이즈 계산을 미리하시고, 계산된 만큼 1024단위로 읽어서 fwrite하시면 문제없을듯...

익명 사용자의 이미지

.멀티파트 디코더
맞습니다.. 흠..바이트 단위로 하시는게 맞구요
나중에 보니깐..
memmem() 이라는 편리한 함수가 있었는데
이런게 있는줄 모르고 직접 만들었었습니다.
memmem()으로 구분문자열을 찾아야 합니다.
물론 strstr도 괜찬구요

한가지 문제가 되는 것은 대용량 파일을 처리할수 있는
능력인데요

이것은... 버퍼링을 잘 구현하셔야 합니다.
실제 구현해 보면 버퍼링부분에서 좀 어렵습니다.

씨언어 문법배우고..
대학1학년때 한달간 아죽 죽을 고생을 하면서
(디버깅하느라 고생) 했던 기억이 나네요 ㅋㅋ

익명 사용자의 이미지

근데 memmem()이 안전한 함수가 아니라네요

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.