C-文件操作&异或加密保护文件

写文件的函数

//创建文件函数:指定文件的路径和文件的内容进行创建
void WriteFile(char * FilePath, char * FileContent) {
    //创建一个文件指针,并赋值位NULL
    FILE * pFile = NULL;
    pFile = fopen(FilePath, "w");//以写模式打开文件
    if (pFile == NULL) {
        printf("open file failed!");
        fclose(pFile);//关闭文件
        exit(0);
    }
​
    fwrite(FileContent, (strlen(FileContent) + 1) * sizeof(char), 1, pFile);//写入内容
​
    fclose(pFile);
}
​
int main()
{   
​
    WriteFile("Hello.txt", "12345");//在当前文件夹中创建Hello.txt文件,文件内容为12345
    return 0;
}

文件会被创建在当前程序源码同级目录中

但是在打开文件后发现文件内容呈乱码情况,这个时候可以在打开文件的时候可以指定文件的编码格式。

指定创建的文件路径;并选择文件编码格式为UTF-8,就可以正常显示文件内容。

读文件函数

读取整个文件的内容

char * ReadFile(char * szFilePath) {
    FILE * pFile;
    char * szReadBuffer = NULL;
    int nReadFileSize = 0;
    if ((pFile = fopen(szFilePath, "r")) == NULL) { //先赋值后判断(pFile = fopen();接着判断pFile是否为Null
        printf("open file failed!");
        fclose(pFile);
        exit(0);
    }
    fseek(pFile, 0, SEEK_END);  //调整文件指针的位置(SEEK_END--文件末尾)
    nReadFileSize = ftell(pFile);   //返回文件内容长度
    rewind(pFile);   //将文件指针重置到文件头
​
    szReadBuffer = (char *)malloc(sizeof(char) * nReadFileSize);
    if (szFilePath == NULL) {
        printf("malloc failed!");
        fclose(pFile);
        exit(0);
    }
    memset(szReadBuffer, 0, nReadFileSize); //将申请到的内存空间内存值置0
​
    int nFileLength = fread(szReadBuffer, 1, nReadFileSize, pFile); //读取文件内容
    if (nFileLength != nReadFileSize) {
        printf("Read File failed!");
        fclose(pFile);
        exit(0);
    }
    return szReadBuffer;
}

这段代码定义了一个函数 ReadFile,其作用是从指定的文件路径读取文件内容,并返回一个指向读取内容的字符串指针。

让我们逐行解释代码:

  1. char * ReadFile(char * szFilePath) {: 定义了一个函数 ReadFile,该函数接受一个字符串参数 szFilePath,表示要读取的文件路径,并返回一个指向字符的指针。
  2. FILE * pFile;: 声明了一个 FILE 类型的指针变量 pFile,用于操作文件。
  3. char * szReadBuffer = NULL;: 声明了一个字符指针变量 szReadBuffer,用于存储读取的文件内容,并初始化为 NULL
  4. int nReadFileSize = 0;: 声明了一个整型变量 nReadFileSize,用于存储文件的大小,并初始化为 0
  5. if ((pFile = fopen(szFilePath, "r")) == NULL) { ... }: 使用 fopen 函数打开文件,模式为只读模式 "r"。如果打开文件失败(即返回的指针为 NULL),则输出错误信息,关闭文件并退出程序。
  6. fseek(pFile, 0, SEEK_END);: 将文件指针移动到文件末尾,以便获取文件的大小。
  7. nReadFileSize = ftell(pFile);: 获取文件指针当前位置,即文件的大小。
  8. rewind(pFile);: 将文件指针重新定位到文件开头,以便读取文件内容。
  9. szReadBuffer = (char *)malloc(sizeof(char) * nReadFileSize);: 使用 malloc 函数动态分配内存空间,大小为文件大小加一(为了存储字符串结束符 \0),并将指针赋值给 szReadBuffer
  10. if (szFilePath == NULL) { ... }: 检查内存分配是否成功。这里应该是检查 szReadBuffer 是否为 NULL,而不是 szFilePath,因为 szFilePath 在这里是函数的参数,而不是动态分配的内存。
  11. memset(szReadBuffer, 0, nReadFileSize);: 使用 memset 函数将动态分配的内存空间初始化为零。
  12. int nFileLength = fread(szReadBuffer, 1, nReadFileSize, pFile);: 使用 fread 函数从文件中读取内容到 szReadBuffer 中,每次读取一个字节,共读取 nReadFileSize 个字节。
  13. if (nFileLength != nReadFileSize) { ... }: 检查实际读取的文件长度是否与预期的文件长度相同。如果不相同,则输出错误信息,关闭文件并退出程序。
  14. return szReadBuffer;:返回读取的文件内容所在的字符指针 szReadBuffer

最后,记得在使用完返回的字符串后,调用 free(szReadBuffer) 来释放动态分配的内存空间,以免造成内存泄漏。

异或加密函数

void xorcode(char * szBuffer, int nSize, char Key) {
    for (size_t i = 0; i < nSize; i++)
    {
        szBuffer[i] ^= Key;
    }
}

这段代码定义了一个名为 xorcode 的函数,其作用是对给定的缓冲区 szBuffer 中的数据进行异或加密操作。

让我们逐行解释代码:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值