게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
Window fread, fwirte함수가 말을 안들어요
게시물ID : programmer_18317짧은주소 복사하기
작성자 : 쭁쭁
추천 : 0
조회수 : 435회
댓글수 : 1개
등록시간 : 2016/08/31 16:54:21
옵션
  • 본인삭제금지
  • 외부펌금지
현재 각종 MD5해시를 구분해서 저장하는 작업을 하고 있습니다. 근데 파일 크기가 커서인지 잘 안되네요
캡처.PNG
위 파일에서 앞자리 한글자 0~9, a~z 별로 구분에서 파일에 따로따로 저장하려 합니다. 파일이 커서인지 제가 코딩을 잘못해서인지 왜인지 모르겟지만 잘 안되네요.... 일단은 앞글자 '0'인것만 따로 빼와서 저장하도록 해보았습니다.
마지막에 아래 사진처럼 이상해집니다. 그리고 원본의 값들이 다 들어가는것도 아니구요
캡처2.PNG

--------------------소스코드----------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>

#define RECORD_SIZE  33  // 한 레코드가 차지하는 바이트 수

int main()
{
int handle = 0; 
int count = 0;
_finddata_t fd;
handle = _findfirst("..\\virus share\\*.md5", &fd);
char * buffer;
if (handle == 0)
{
printf("_findfirst Error");
return -1;
}
char* filename;
filename = (char*)malloc(sizeof(FILENAME_MAX));
strcpy(filename, "..\\virus share\\");
strcat(filename, fd.name);
FILE *fp = fopen(filename, "r");
fseek(fp, 0, SEEK_END);  // 파일포인터를 끝으로 이동
count = ftell(fp) / RECORD_SIZE; //총 크기를 32+1 로 나눠 해시 갯수
fseek(fp, 0, SEEK_SET);
buffer = (char*)calloc(count, RECORD_SIZE);
int readdata = fread(buffer, RECORD_SIZE, count, fp);
printf("%d, %d\n", readdata, count); //여기서 count와 readdata가 같아야 하는데 다름. readdata가 정확한값
fclose(fp); 

char * token = NULL;
token = strtok(buffer, "\n");
char buff[1];
int count2 = 0;

FILE *fp2 = fopen("..\\virus share_test\\0.md5", "w+");
char(*buffer2)[RECORD_SIZE];
buffer2 = (char(*)[RECORD_SIZE])calloc(readdata, RECORD_SIZE);
while (token != NULL)
{
strncpy(buff, token, 1);
if (buff[0] == '0')
{
strcpy(buffer2[count2], token);
count2++;
}
token = strtok(NULL, "\n");
}
fwrite(buffer2, RECORD_SIZE, count2, fp2);
fclose(fp2);

return 0;
}
-------------------------소스코드 끝-------------------------------
buffer2 동적할당을 이상하게 해주었는데 어떤식으로 해야할지 잘 모르겠네요, 도중에 개행문자도 안들어가고....
fseek과 해시바이트갯수를 나눠 구한 갯수와 fread로 읽어드린 해쉬 갯수가 다른것도 이상하고요....
알려주시면 감사하겠습니다.ㅠ
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호