C语言文件操作函数的编写

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 1、  编写文件操作的头文件 /************************************************************************** Copyright(C)    :2014-08-5 toto Filename       :file.h Author          :涂作权 Version         :V1.1

1、  编写文件操作的头文件

/**************************************************************************

Copyright(C)    :2014-08-5 toto

Filename       :file.h

Author          :涂作权

Version         :V1.1

Date            :2014-08-05

Description     :文件操作的头文件

Others          :参考了原来的多线程操作和单线程操作当当网数据

FunctionList   :

 

History:修改历史记录列表,每条修改记录应该包括修改日期

1.Date:

Author:

Modification:

**************************************************************************/

/*将安全检查警报设置为失效,必须放在第一行*/

#pragma warning(disable:4996)

#ifndef _FILE_H_

#define _FILE_H_

 

#include <stdio.h>    //注意文件操作相关函数的头文件是stdio.h

#include<stdlib.h>    //为了使用system函数

#include <string.h>   //字符串操作所用到的头文件

#include<Windows.h>   //使用休眠函数时用到的头文件

#include <crtdbg.h>   //做内存泄露检测所需的头文件

 

/*************************************************************

Function         :getFileRow

Description      :获得文件的中记录的行数

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

path             :表示的是文件的路径

Output           :输出的信息为空

Return           :返回文件中的行数

Others           :其它说明

*************************************************************/

int getFileRow(const char *path);

 

/*************************************************************

Function         :main_view

Description      :查看菜单信息

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

Output           :输出的信息为空

Return           :返回值为void

Others           :其它说明

*************************************************************/

void main_view();

 

/*************************************************************

Function         :getFileSize

Description      :获得文件的大小(字节数)

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

path             :表示的文件路径

Output           :输出的信息为空

Return           :文件的字节大小

Others           :其它说明

*************************************************************/

int getFileSize(const char *path);

 

/*************************************************************

Function         :loadFile

Description      :加载文件

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

path             :表示的是文件路径

rowSize          :表示的是文件中信息由多少行

Output           :输出的信息为空

Return           :返回值为int,如果加载成功返回1,如果加载失败返回0

Others           :其它说明

*************************************************************/

int loadFile(const char *fPath, const int rowSize);

 

/*************************************************************

Function         :findStringByKeyword

Description      :通过关键字的方式进行查找

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

keyword          :通过关键字查找信息

rowSize          :表示的是文件中信息由多少行

Output           :输出的信息为空

Return           :如果查找失败返回0,查找成功返回1

Others           :其它说明

*************************************************************/

int findStringByKeyword(const char *keyword, const int rowSize);

 

/*************************************************************

Function         :freeMemory

Description      :释放内存空间

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

pp               :存储文件信息的二重指针

rowSize          :表示的行大小

Output           :输出的信息为空

Return           :返回值为void

Others           :其它说明

*************************************************************/

void freeMemory(char **pp, const int rowSize);

 

/*************************************************************

Function         :writeStr2File

Description      :将字符串拼接的方式写入文件

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

pFilePath        :要写入的文件路径

pStr             :要写入的字符串

mode             :表示写入的模式,0:表示直接追击   1:表示换行追加

Output           :输出的信息为空

Return           :如果写入成功返回1,如果写入失败返回0

Others           :其它说明

*************************************************************/

int writeStr2File(const char *pFilePath, const char *pStr, int mode);

 

/*************************************************************

Function         :copy()

Description      :将一个文件拷贝到另外一个文件

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

pDestFile        :要写入的文件

pOriginalFile    :原始文件

mode             :表示写入的模式,0:表示直接追击   1:表示换行追加

Output          :输出的信息为空

Return           :如果写入成功返回1,如果写入失败返回0

Others           :其它说明

*************************************************************/

int copy(const char *pDestFile, const char *pOriginalFile);

 

/*************************************************************

Function         :encryptFileByChar()

Description      :将文件按照ch进行加密,并将文件输出到指定文件中

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

pDestFile        :要写入的文件

pOriginalFile    :原始文件

ch               :用于加密的字符

Output           :输出的信息为空

Return           :如果写入成功返回1,如果写入失败返回0

Others           :其它说明

*************************************************************/

int encryptFileByChar(const char *pDestFile,

    const char *pOriginalFile, const char ch);

 

/*************************************************************

Function         :deCodeFileByChar()

Description      :通过ch进行解密文件,并将文件输出到指定的文件中

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

pDestFile        :要写入的文件

pOriginalFile    :原始文件

ch               :用于解密的字符

Output           :输出的信息为空

Return           :如果写入成功返回1,如果写入失败返回0

Others           :其它说明

*************************************************************/

int deCodeFileByChar(const char *pDestFile,

    const char *pOriginalFile, const char ch);

 

/*************************************************************

Function         :stringEncrypt()

Description      :将字符串变成字符串加密后的字符串

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

pwdStr           :将字符串变成加密后的字符串

str              :要加密的字符串

Output           :输出的信息为空

Return           :返回加密后的字符串地址

Others           :其它说明

*************************************************************/

char * str2EncryptString(char *pwdStr, char *str);

 

/*************************************************************

Function         :str2DecodedString()

Description      :将字符串变成解密之后的文件

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

pwdStr           :将字符串变成加密后的字符串

str              :要解密的字符串

Output           :输出的信息为空

Return           :返回解密后的字符串地址

Others           :其它说明

*************************************************************/

char * str2DecodedString(char *pwdStr, char *str);

 

/*************************************************************

Function         :encryptAndDecodeFileByString()

Description      :通过字符串str来加解密文件

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

pDestFile        :要写入的文件

pOriginalFile    :原始文件

pwdString        :用于加解密的字符

Output           :输出的信息为空

Return           :如果写入成功返回1,如果写入失败返回0

Others           :其它说明

*************************************************************/

int encryptAndDecodeFileByString(const char *pDestFile,

    const char *pOriginalFile, const char* pwdString);

 

 

#endif

 

2.文件操作的实现函数

 

#define _CRT_SECURE_NO_WARNINGS

#include "file.h"

 

char **pp = NULL;   //存储指针数组的地址

int flag = 0;

 

/*************************************************************

Function         :getFileRow

Description      :获得文件的中记录的行数

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

path             :表示的是文件的路径

Output           :输出的信息为空

Return           :返回文件中的行数

Others           :其它说明

*************************************************************/

int getFileRow(const char *path)

{

    FILE *pf;

    pf = fopen(path, "r");

    if (pf == NULL)

    {

        //代表获取失败

        fclose(pf);

        return -1;

    }

    else

    {

        int i = 0;

        //是否到文件末尾,如果到了返回1,没有到的时候返回0

        while (!feof(pf))

        {

            char str[275];

            //读取一行

            fgets(str, 275, pf);

            i++;

        }

        fclose(pf);

        return i;

    }

}

 

/*************************************************************

Function         :main_view

Description      :查看菜单信息

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

Output           :输出的信息为空

Return           :返回值为void

Others           :其它说明

*************************************************************/

void main_view()

{

    system("cls");

    printf("\n******************当当用户信息查询系统*******************\n");

    printf("\t1.载入数据至内存(-l)\n");

    printf("\t2.查找字符串(-s)\n");

    printf("\t3.释放内存(-f)\n");

    printf("\n*************************0.退出**************************\n");

}

 

/*************************************************************

Function         :getFileSize

Description      :获得文件的大小(字节数)

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

path             :表示的文件路径

Output           :输出的信息为空

Return           :文件的字节大小

Others           :其它说明

*************************************************************/

int getFileSize(const char *path)

{

    //定义一个文件指针

    FILE *pf = NULL;

    pf = fopen(path, "r");

    if (pf == NULL)

    {

        //代表获取文件失败

        fclose(pf);

        return -1;

    }

    else

    {

        //fseek():Moves thefile pointer to a specified location.

        fseek(pf, 0, SEEK_END);

        //ftell( FILE*stream ):文件开头到当前位置有多少个字节

        int num = ftell(pf);

        //关闭文件

        fclose(pf);

        return num;

    }

}

 

/*************************************************************

Function         :loadFile

Description      :加载文件

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

path             :表示的是文件路径

rowSize          :表示的是文件中信息由多少行

Output           :输出的信息为空

Return           :返回值为int,如果加载成功返回1,如果加载失败返回0

Others           :其它说明

*************************************************************/

int loadFile(const char *fPath, const int rowSize)

{

    printf("加载文件后,请稍后....");

    FILE *pf;

    pp = (char **)malloc(sizeof(char *)* rowSize);

    pf = fopen(fPath, "r");

    if (pf == NULL)

    {

        printf("对不起,加载文件失败!");

        fclose(pf);

        return 0;

    }

    else

    {

        int i;

        for (i = 0; i < rowSize;i++)

        {

            //读取字符串的缓冲区

            char str[275] = { 0 };

            //*fgets(char*string,int n,FILE *stream);

            //从文件中逐行读取字符串

            fgets(str,sizeof(str) ,pf);

            //获取要分配的字符串长度,最后加一是因为'\0'

            int strlength = strlen(str) + 1;

            //分配内存

            char *px = (char *)malloc(sizeof(char) * strlength);

            //拷贝字符串

            strcpy(px, str);

            //设定最后一个字符串'\0'

            px[strlength - 1] = '\0';

            //存储字符串的首地址到指针数组

            pp[i] = px;

        }

    }

    return 1;

}

 

/*************************************************************

Function         :findStringByKeyword

Description      :通过关键字的方式进行查找

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

keyword          :通过关键字查找信息

rowSize          :表示的是文件中信息由多少行

Output           :输出的信息为空

Return           :如果查找失败返回0,查找成功返回1

Others           :其它说明

*************************************************************/

int findStringByKeyword(const char *keyword, const int rowSize)

{

    if (pp == NULL)

    {

        printf("对不起,您还没有加载文件,请您先加载文件\n");

        return 0;

    }

    else

    {

        int i;

        for (i = 0; i < rowSize;i++)

        {

            //遍历所有的指针数组的地址,字符串查找

            char *pTemp = strstr(pp[i],keyword);

            if (pTemp != NULL)

            {

                printf("\n%s",pp[i]);

            }

        }

    }

    return 1;

}

 

/*************************************************************

Function         :freeMemory

Description      :释放内存空间

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

pp               :存储文件信息的二重指针

rowSize          :表示的行大小

Output           :输出的信息为空

Return           :返回值为void

Others           :其它说明

*************************************************************/

void freeMemory(char **pp, const int rowSize)

{

    int i;

    for (i = 0; i < rowSize;i++)

    {

        free(pp[i]);

    }

    free(pp);

    flag = 0;

}

 

/*************************************************************

Function         :writeStr2File

Description      :将字符串拼接的方式写入文件

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

pFilePath        :要写入的文件路径

pStr             :要写入的字符串

mode             :表示写入的模式,0:表示直接追击   1:表示换行追加

Output           :输出的信息为空

Return           :如果写入成功返回1,如果写入失败返回0

Others           :其它说明

*************************************************************/

int writeStr2File(const char *pFilePath, const char *pStr, int mode)

{

    FILE *pf;

    //a+表示以追加的方式写文件,如果

    pf = fopen(pFilePath, "a+");

    if (pf == NULL)

    {

        //表示文件打开失败

        fclose(pf);

        return 0;

    }

    else

    {

        if (mode)

        {

            fputs(pStr, pf);

            //通过加入'\r'的方式换行,如果隔行输出使用'\r\n'

            fprintf(pf, "\r");

        }

        else

        {

            fprintf(pf, pStr);

        }

        fclose(pf);

    }

    //写入成功返回1

    return 1;

}

 

/*************************************************************

Function         :copy()

Description      :将一个文件拷贝到另外一个文件

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

pDestFile        :要写入的文件

pOriginalFile    :原始文件

mode             :表示写入的模式,0:表示直接追击   1:表示换行追加

Output           :输出的信息为空

Return           :如果写入成功返回1,如果写入失败返回0

Others           :其它说明

*************************************************************/

int copy(const char *pDestFile, const char *pOriginalFile)

{

    FILE *pfr, *pfw;

    //以代开二进制文件的方式打开

    pfr = fopen(pOriginalFile, "r");

    //要写入的文件

    pfw = fopen(pDestFile, "w");

    if (pfr == NULL || pfw == NULL)

    {

        fclose(pfr);

        fclose(pfw);

        return 0;

    }

    else

    {

        int length = getFileSize(pOriginalFile);

        //分配内存,读取文件

        char *p = (char *)malloc(length * sizeof(char));

        //读取文件到内存

        fread(p,sizeof(char),length,pfr);

        //写入文件

        fwrite(p,sizeof(char),length,pfw);

 

        //关闭文件

        fclose(pfr);

        fclose(pfw);

    }

    return 1;

}

 

/*************************************************************

Function         :encryptFileByChar()

Description      :将文件按照ch进行加密,并将文件输出到指定文件中

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

pDestFile        :要写入的文件

pOriginalFile    :原始文件

ch               :用于加密的字符

Output           :输出的信息为空

Return           :如果写入成功返回1,如果写入失败返回0

Others           :其它说明

*************************************************************/

int encryptFileByChar(const char *pDestFile,

    const char *pOriginalFile, const char ch)

{

    FILE *pfr, *pfw;

    //以读的方式写入文件

    pfr = fopen(pOriginalFile, "r");

    //以写的方式写入文件中

    pfw = fopen(pDestFile, "w");

    if (pfr == NULL || pfw == NULL)

    {

        //表示加载失败

        fclose(pfr);

        fclose(pfw);

        return 0;

    }

    else

    {

        //读取原始文件中的大小(通过这种方式获得字节数大小)

        int length = getFileSize(pOriginalFile);

        //分配内存,读取文件

        char *p = (char *)malloc(sizeof(char) * length);

        //读取文件到内存中

        fread(p,sizeof(char),length,pfr);

        int i;

        for (i = 0; i < length;i++)

        {

            //加密方法是,于指定字符串进行异或操作

            p[i] ^= ch;

        }

        //写入文件

        fwrite(p,sizeof(char),length,pfw);

        fclose(pfr);

        fclose(pfw);

    }

    return 1;

}

 

/*************************************************************

Function         :deCodeFileByChar()

Description      :通过ch进行解密文件,并将文件输出到指定的文件中

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

pDestFile        :要写入的文件

pOriginalFile    :原始文件

ch               :用于解密的字符

Output           :输出的信息为空

Return           :如果写入成功返回1,如果写入失败返回0

Others           :其它说明

*************************************************************/

int deCodeFileByChar(const char *pDestFile,

    const char *pOriginalFile, const char ch)

{

    FILE *pfr, *pfw;

    pfr = fopen(pOriginalFile, "r");

    pfw = fopen(pDestFile,"w");

    if (pfr == NULL || pfw == NULL)

    {

        fclose(pfr);

        fclose(pfw);

        //如果是成功,则

        return 0;

    }

    else

    {

        //读取原始文件的大小

        int length = getFileSize(pOriginalFile);

        //分配内存,读取文件

        char *p = (char *) malloc(sizeof(char) * length);

        //读取文件到内存中

        fread(p, sizeof(char), length, pfr);

        int i;

        for (i = 0; i < length; i++)

        {

            //解密方法是,于指定字符串进行异或操作

            p[i] ^= ch;

        }

        fwrite(p, sizeof(char), length, pfw);

        //关闭文件

        fclose(pfr);

        fclose(pfw);

    }

 

    return 1;

}

 

/*************************************************************

Function         :stringEncrypt()

Description      :将字符串变成字符串加密后的字符串

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

pwdStr           :将字符串变成加密后的字符串

str              :要加密的字符串

Output           :输出的信息为空

Return           :返回加密后的字符串地址

Others           :其它说明

*************************************************************/

char * str2EncryptString(char *pwdStr, char *str)

{

    //获取加密长度

    int pwdStrLength = strlen(pwdStr);

    //获取字符串的长度

    int strLength = strlen(str);

    if (strLength % pwdStrLength)

    {

        int times = strLength / pwdStrLength;

        int i, j;

        //循环次数

        for (i = 0; i < times; i++)

        {

            for (j = 0; j < pwdStrLength;j++)

            {

                str[pwdStrLength * i + j] ^= pwdStr[j];

            }

        }

    }

    else

    {

        //获取循环次数

        int times = strLength / pwdStrLength;

        int i, j;

        for (i = 0; i < times;i++)

        {

            //循环密码

            for (j = 0; j < pwdStrLength;j++)

            {

                str[pwdStrLength * i + j] ^= pwdStr[j];

            }

        }

        //剩下的长度

        int lastLength = strLength % pwdStrLength;

        for (i = 0; i < lastLength;i++)

        {

            str[pwdStrLength * (strLength / pwdStrLength) + i] ^= pwdStr[i];

        }

    }

    return str;

}

 

/*************************************************************

Function         :str2DecodedString()

Description      :将字符串变成解密之后的文件

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

pwdStr           :将字符串变成加密后的字符串

str              :要解密的字符串

Output           :输出的信息为空

Return           :返回解密后的字符串地址

Others           :其它说明

*************************************************************/

char * str2DecodedString(char *pwdStr, char *str)

{

    //获取加密长度

    int pwdStrLength = strlen(pwdStr);

    //获取字符串的长度

    int strLength = strlen(str);

    if (strLength % pwdStrLength)

    {

        int times = strLength / pwdStrLength;

        int i, j;

        //循环次数

        for (i = 0; i < times; i++)

        {

            for (j = 0; j < pwdStrLength; j++)

            {

                str[pwdStrLength * i + j] ^= pwdStr[j];

            }

        }

    }

    else

    {

        //获取循环次数

        int times = strLength / pwdStrLength;

        int i, j;

        for (i = 0; i < times; i++)

        {

            //循环密码

            for (j = 0; j < pwdStrLength; j++)

            {

                str[pwdStrLength * i + j] ^= pwdStr[j];

            }

        }

        //剩下的长度

        int lastLength = strLength % pwdStrLength;

        for (i = 0; i < lastLength; i++)

        {

            str[pwdStrLength * (strLength / pwdStrLength) + i] ^= pwdStr[i];

        }

    }

    return str;

}

 

/*************************************************************

Function         :encryptAndDecodeFileByString()

Description      :通过字符串str来加解密文件

Calls            :被本函数调用的函数清单

CalledBy        :调用本函数的函数清单

TableAccessed   :被访问的表(此项仅对于牵扯到数据库操作的程序)

TableUpdated    :被修改的表(此项对于牵扯到数据库操作的程序)

 

pDestFile        :要写入的文件

pOriginalFile    :原始文件

pwdString        :用于加解密的字符

Output           :输出的信息为空

Return           :如果写入成功返回1,如果写入失败返回0

Others           :其它说明

*************************************************************/

int encryptAndDecodeFileByString(const char *pDestFile,

    const char *pOriginalFile, const char* pwdString)

{

    FILE *pfr, *pfw;

    //读取

    pfr = fopen(pOriginalFile, "r");

    //写入

    pfw = fopen(pDestFile, "w");

    if (pfr == NULL || pfw == NULL)

    {

        fclose(pfw);

        fclose(pfr);

        return 0;

    }

    else

    {

        int length = getFileSize(pOriginalFile);

        char *newstr = (char*)malloc(sizeof(char) * (length + 1));

        int i;

        for (i = 0; i < length;i++)

        {

            //获取一个字符

            char ch = fgetc(pfr);

            //不断存入字符

            newstr[i] = ch;

        }

        //字符串处理为'\0'

        newstr[length] = '\0';

        //加密字符串

        str2EncryptString(pwdString,newstr);

 

        for (i = 0; i < length;i++)

        {

            //挨个写入字符

            fputc(newstr[i], pfw);

        }

    }

    fclose(pfr);

    //关闭文件

    fclose(pfw);

   

    return -1;

}

 

 

 

 

 

 

 

 

 

 

 

 

 

目录
相关文章
|
2天前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
25 15
|
2天前
|
C语言
【C语言程序设计——函数】亲密数判定(头歌实践教学平台习题)【合集】
本文介绍了通过编程实现打印3000以内的全部亲密数的任务。主要内容包括: 1. **任务描述**:实现函数打印3000以内的全部亲密数。 2. **相关知识**: - 循环控制和跳转语句(for、while循环,break、continue语句)的使用。 - 亲密数的概念及历史背景。 - 判断亲密数的方法:计算数A的因子和存于B,再计算B的因子和存于sum,最后比较sum与A是否相等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台对代码进行测试,预期输出如220和284是一组亲密数。 5. **通关代码**:提供了完整的C语言代码实现
38 24
|
2天前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
38 23
|
2天前
|
存储 小程序 C语言
【C语言程序设计——文件】文件操作(头歌实践教学平台习题)【合集】
本文介绍了C语言中的文件操作,分为两个关卡。第1关任务是将键盘输入的字符(以#结束)存入`file1.txt`并显示输出;第2关任务是从键盘输入若干行文本(每行不超过80个字符,用-1作为结束标志),写入`file2.txt`后再读取并显示。文中详细讲解了文件的打开、读取(使用`fgetc()`和`fgets()`)、写入(使用`fputc()`和`fputs()`)及关闭操作,并提供了示例代码和测试说明。
16 5
|
1天前
|
存储 编译器 C语言
【C语言程序设计——函数】回文数判定(头歌实践教学平台习题)【合集】
算术运算于 C 语言仿若精密 “齿轮组”,驱动着数值处理流程。编写函数求区间[100,500]中所有的回文数,要求每行打印10个数。根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码。如果操作数是浮点数,在 C 语言中是不允许直接进行。的结果是 -1,因为 -7 除以 3 商为 -2,余数为 -1;注意:每一个数据输出格式为 printf("%4d", i);的结果是 1,因为 7 除以 -3 商为 -2,余数为 1。取余运算要求两个操作数必须是整数类型,包括。开始你的任务吧,祝你成功!
15 1
|
1月前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
75 10
|
1月前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
58 9
|
1月前
|
C语言 开发者
【C语言】数学函数详解
在C语言中,数学函数是由标准库 `math.h` 提供的。使用这些函数时,需要包含 `#include <math.h>` 头文件。以下是一些常用的数学函数的详细讲解,包括函数原型、参数说明、返回值说明以及示例代码和表格汇总。
55 6
|
1月前
|
存储 C语言
【C语言】输入/输出函数详解
在C语言中,输入/输出操作是通过标准库函数来实现的。这些函数分为两类:标准输入输出函数和文件输入输出函数。
315 6
|
1月前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
69 6