C语言二进制文件读写程序实现(基础)

来源:互联网 发布:网络400电话价格 编辑:程序博客网 时间:2024/05/01 11:15

C语言二进制文件读写程序实现(基础)

由于对文件操作比生疏,这里拿一个最近的一个程序来学习和备忘。

/*** 该文件实现将数字文本保存为二进制文件。* 这里保存的二进制格式为 unsigned short int* 这里主要用到fwrite,fread*/#include <stdio.h>#include <string.h>#define NAMELEN 256#define isDigitChar(ch) ((ch)>='0' && ((ch)<='9'))#define fprintData(file, val) fprintf((file), "%hu", (val))//%hu is for unsigned short int; %hd is for short inttypedef unsigned short int DataType;const int DATATYPESIZE = sizeof(DataType);void autoOutputFilename(char* outputFile, const char* inputFile);//auto names outputFileint  transCharFileToIntFile(const char* in_filename, char* out_filename);int  readFromBinaryFile(const char* filename);int main(int argc, char** argv){char in_filename[NAMELEN];char out_filename[NAMELEN];while(gets(in_filename)){if(transCharFileToIntFile(in_filename, out_filename)){printf("Unsuccessful file operator!\n");}else{printf("Success!\n");readFromBinaryFile(out_filename);}/**/}return 0;}//return -1 means unsucessful, 0 sucessful.int transCharFileToIntFile(const char* in_filename, char* out_filename){    FILE *f_input = NULL, *f_output = NULL; char ch = 0, preChar = 0;DataType val = 0;//file opreatorf_input = fopen(in_filename, "r");if(NULL == f_input) return -1;autoOutputFilename(out_filename, in_filename);f_output = fopen(out_filename, "wb");  // b means binary fileif(NULL == f_output) {fclose(f_input); return -1;}//get outputwhile((ch = fgetc(f_input))!=EOF){if(isDigitChar(ch)){val = val*10 + (ch-'0');}else{if(isDigitChar(preChar)){fwrite(&val, DATATYPESIZE, 1, f_output);val = 0;}}preChar = ch;}if(isDigitChar(preChar)){fwrite(&val, DATATYPESIZE, 1, f_output);//size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );}//file closefclose(f_input);fclose(f_output);return 0;}int readFromBinaryFile(const char* filename){DataType val;FILE* fp = fopen(filename, "rb");if(NULL == fp){return -1;}//Read block of data from stream //size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );while(fread(&val, sizeof(DataType), 1, fp) == 1){//freadis fprintf(stdout, "%hu\n", val);}fclose(fp);return 0;}void autoOutputFilename(char* out_name, const char* in_name){int i = 0, flag = 0;strcpy(out_name, in_name);strcat(out_name, ".bit16");}


0 0