标签:
C文件操作综合项目: 读取一个文件的数据到另一个文件,在读取的过程中加密.
#include "stdlib.h" #include "stdio.h" #include "string.h" int fileEnc(char* fileDestinationPath, char* fileSourcePath) { FILE *fileDestination = NULL; FILE *fileSource = NULL; int ret = 0; int buf[4096]; int plainlen = 0; int writelen = 0; if(fileDestinationPath==NULL || fileSourcePath==NULL) { ret = -5; return ret; } //1.打开文件 // 注意: 源文件打开的方式是二进制的只读 // 目标文件打开方式是二进制的只写 fileDestination = fopen(fileDestinationPath, "wb"); if(fileDestination==NULL) { ret = -1; goto End; } fileSource = fopen(fileSourcePath, "rb"); if(fileSource==NULL) { ret = -2; goto End; } //2.按4K读入数据fread() while(!feof(fileSource)) { plainlen = fread(buf, 1, 4096, fileSource); // 当这个文件的大小小于4K的时候 if(feof(fileSource)) { break; } } writelen = fwrite(buf, 1, plainlen, fileDestination); if(writelen!=plainlen) { ret = -3; goto End; } End: if(fileDestination!=NULL) fclose(fileDestination); if(fileSource!=NULL) fclose(fileSource); return ret; } int main() { char* fileDestinationpath = NULL; char* fileSourcepath = NULL; int ret = 0; fileSourcepath = "C:/1.txt"; fileDestinationpath = "C:/2.txt"; ret = fileEnc(fileDestinationpath, fileSourcepath); if(ret == -5) { printf("func: fileEnc err: fopenfileDestinationPath==NULL || fileSourcePath==NULL %d", ret); } if(ret==-1) { printf("func: fileEnc err: fopen(fileDestinationPath) %d", ret); } if(ret==-2) { printf("func: fileEnc err: fopen(fileSourcePath) %d", ret); } return 0; }
注意点:
1.文件打开方式注意
2.fread()和fwrite()函数返回值
int fread(void *ptr,int size,int nitems,FILE *stream);
int fwrite(void *ptrxx,int size,int nitems,FILE *stream);
fread()函数从流指针指定的文件中读取nitems个数据项,每个数据项的长度为size个字节,读取的nitems数据项存入由ptr指针指向的内存缓冲区中,在执行fread()函数时,文件指针随着读取的字节数而向后移动,最后移动结束的位置等于实际读出的字节数。该函数执行结束后,将返回实际读出的数据项数.这个数据项数不一定等于设置的nitems,因为若文件中没有足够的数据项,或读中间出错,都会导致返回的数据项数少于设置的nitems。当返回数不等于nitems时,可以用feof()或ferror()函数进行检查。
fwrite()函数从ptr指向的缓冲区中取出长度为size字节的nitems个数据项,写入到流指针stream指向的文件中,执行该操作后,文件指针将向后移动,移动的字节数等于写入文件的字节数目。该函数操作完成后,也将返回写入的数据项数。
标签:
原文地址:http://www.cnblogs.com/gossiplee/p/4515327.html