파일작업좀 봐주세요 고수님들부탁드립니다
안녕하세요
아래파일을 읽어서 글자가 깨어져나오는부분을 추출해서 다른파일로만들어야됩니다 그부분이 바이너리입니다
근데 이리저리해봐도 안됩니다
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
뭐.. 질문하고는 직접 연관은 없지만..CGI를 C로 하시나 봐요
뭐.. 질문하고는 직접 연관은 없지만..
CGI를 C로 하시나 봐요??
cgi 처리 C라이브러리는 찾기 어렵지 않습니다.. 대표적으로 qDecoder
참고해보세요..
도움이 되었으면 합니다.
바이너리 파일에 str~ 붙은 함수 쓰시면 안됩니다. 궂이, 줄단위로
바이너리 파일에 str~ 붙은 함수 쓰시면 안됩니다.
궂이, 줄단위로 자르지 마시고, 읽은만큼 그대로 파일에 써주시면 될듯 싶은데요.
줄단위로자르지않고구분자를 알아내는방법이 있을까여한바이트식읽어서 비
줄단위로자르지않고
구분자를 알아내는방법이 있을까여
한바이트식읽어서 비교하는것은
파일의 용량이 몇백메가 정도되는파일을
한바이트식비교하려니
엄두가 안나서그런데여
위와같은경우는
구분자 -----------------------------7d4348153051e
의위치만 알아내면될것도같은데
이것을 모르겠읍니다
몇백메가되는 파일도 한바이트씩 비교하는데 아무문제 없습니다..바이
몇백메가되는 파일도 한바이트씩 비교하는데 아무문제 없습니다..
바이너리는 str함수를 쓰시면 안됩니다...
바이너리파일을 읽는데 \n 을 비교한다는 것 자체가 잘못되었습니다. 바이너리파일인지를 판단하는 함수를 하나 만드시고, 바이너리파일일 경우엔 따로 처리하도록 하시는게 좋을듯합니다.
저로서는 이미지파일같은 파일에 \n이 무슨 의미를 가지며, unicode 스트링으로 되어있는 MS WORD문서에서 저렇게 처리할 이유가 무엇인지 모르겠습니다.
CWSO <-- 이부분을 건너뛰고 읽으면 될듯한데요?사
CWSO <-- 이부분을 건너뛰고 읽으면 될듯한데요?
사이즈 계산을 미리하시고, 계산된 만큼 1024단위로 읽어서 fwrite하시면 문제없을듯...
.멀티파트 디코더맞습니다.. 흠..바이트 단위로 하시는게 맞구요나
.멀티파트 디코더
맞습니다.. 흠..바이트 단위로 하시는게 맞구요
나중에 보니깐..
memmem() 이라는 편리한 함수가 있었는데
이런게 있는줄 모르고 직접 만들었었습니다.
memmem()으로 구분문자열을 찾아야 합니다.
물론 strstr도 괜찬구요
한가지 문제가 되는 것은 대용량 파일을 처리할수 있는
능력인데요
이것은... 버퍼링을 잘 구현하셔야 합니다.
실제 구현해 보면 버퍼링부분에서 좀 어렵습니다.
씨언어 문법배우고..
대학1학년때 한달간 아죽 죽을 고생을 하면서
(디버깅하느라 고생) 했던 기억이 나네요 ㅋㅋ
근데 memmem()이 안전한 함수가 아니라네요
근데 memmem()이 안전한 함수가 아니라네요
댓글 달기