현재 각종 MD5해시를 구분해서 저장하는 작업을 하고 있습니다. 근데 파일 크기가 커서인지 잘 안되네요
위 파일에서 앞자리 한글자 0~9, a~z 별로 구분에서 파일에 따로따로 저장하려 합니다. 파일이 커서인지 제가 코딩을 잘못해서인지 왜인지 모르겟지만 잘 안되네요.... 일단은 앞글자 '0'인것만 따로 빼와서 저장하도록 해보았습니다.
마지막에 아래 사진처럼 이상해집니다. 그리고 원본의 값들이 다 들어가는것도 아니구요
--------------------소스코드----------------------------------
#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로 읽어드린 해쉬 갯수가 다른것도 이상하고요....
알려주시면 감사하겠습니다.ㅠ