C 언어 file 저장 읽기 예제 입니다.
save_file 에서는 fwrite 함수를 이용합니다. 전체적으로 write되는 양은 rwsize = fwrite(buf,1,datasize,fp); 이런 함수에서 1*datasize 가 됩니다. rwsize = fread(buf,1,fsize,fp); 읽을때도 1*fsize만큼 읽습니다.
읽을때는 배열의 크기를 미리 할당해서 해당 크기만큼 읽도록 합니다.
저장시에는 저장된 배열과 크기를 함께 넘기도록 합니다.
long int load_file(char *filename, char *buf, long int fsize)filename : 읽어오는 파일의 이름입니다.
buf : 읽어오는 데이터를 저장하는 buffer입니다. 미리 메모리 할당이 되어있어야 합니다.
fsize : 읽어올때의 양을 설정합니다. byte 단위
long int save_file(char *filename, char *buf, long int datasize)filename : 저장할때 파일의 이름입니다.
buf : 저장하고자 하는 데이터가 저장된 buffer입니다.
datasize : buf의 크기를 나타냅니다. byte 단위
long int get_file_length(char *filename)아래 함수에 대한 설명이 있습니다.
http://swlock.blogspot.com/2017/05/get-filesize-function-in-c-file-in-c.html
load_file, save_file 예제
#include <stdio.h> #include <stdlib.h> // load filedata in buf. // You should set a filesize in advance. long int load_file(char *filename, char *buf, long int fsize) { FILE *fp; long int rwsize = 0; fp = fopen(filename,"rb"); if(fp==NULL) return -1; rwsize = fread(buf,1,fsize,fp); if(rwsize<=0){ fclose(fp); return -1; } fclose(fp); return rwsize; } // save file. long int save_file(char *filename, char *buf, long int datasize) { FILE *fp; long int rwsize = 0; fp = fopen(filename,"wb"); if(fp==NULL) return -1; rwsize = fwrite(buf,1,datasize,fp); if(rwsize<=0){ fclose(fp); return -1; } fclose(fp); return rwsize; } // it returns sizes of file. // if have an error, it will return the value minus. long int get_file_length(char *filename) { long int length = 0; FILE *fp; fp = fopen(filename,"rb"); if( fp == NULL ) return -1; fseek(fp,0,2); length = ftell(fp); fclose(fp); return length; } int main() { char data[]={'D','a','t','a','\n'}; char *loaddata; long int size; printf("saved size : %ld\n",save_file("sample.dat",data,sizeof(data))); size = get_file_length("sample.dat"); loaddata = malloc(size+1); printf("load size : %ld\n",load_file("sample.dat",loaddata,sizeof(data))); loaddata[size] = 0; printf("data:%s\n",loaddata); free(loaddata); return 1; }
실행 예제
E:\blogdata>gcc load_save_file.c E:\blogdata>a saved size : 5 load size : 5 data:Data E:\blogdata>dir *.dat 2017-05-28 오후 08:01 5 sample.dat 1개 파일 5 바이트 E:\blogdata>type sample.dat Data
댓글 없음:
댓글 쓰기