码迷,mamicode.com
首页 > 其他好文 > 详细

文件操作--大文件的加密和搬运

时间:2015-05-19 20:33:48      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!