2017년 5월 28일 일요일

save & load file example in C ( c 언어 file 저장 읽기 예제 )

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



댓글 없음:

댓글 쓰기