首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

C++文件操作 更动文件前后1024字节数据

2013-12-04 
C++文件操作 更改文件前后1024字节数据主要想实现文件的破坏和恢复功能,程序执行一次文件破坏,再执行一次

C++文件操作 更改文件前后1024字节数据
主要想实现文件的破坏和恢复功能,程序执行一次文件破坏,再执行一次文件恢复正常......
比如有一大于1M的任意后缀格式的文件,如何更改该文件前后512字节数据,更改操作可以是取反或者与或等等。希提供实例代码帮助理解,谢谢。C++文件操作 更动文件前后1024字节数据 C++?文件操作
[解决办法]

#include <stdio.h>

bool __stdcall CrnEncryptFile(LPSTR lpFileName)
{
    // 以二进制读写方式打开文件
    FILE *fp = fopen(lpFileName, "rb+");
    if (!fp) return false;

    // 获取文件大小,如果小于1MB就不进行加密,这个地方自己根据需求修改
    fseek(fp, 0, SEEK_END);
    long lSize = ftell(fp);
    if (lSize < 1048576) return false;

    // 从文件头部读取512个字节
    BYTE btBuffer[512];
    fseek(fp, 0, SEEK_SET);
    fread(btBuffer, 1, 512, fp);

    // 对缓冲中的数据进行加密运算
    for (int i = 0; i < 512; i++)
    {
        btBuffer[i] ^= 0xc2;
    }

    // 再写回文件头部
    fseek(fp, 0, SEEK_SET);
    fwrite(btBuffer, 1, 512, fp);

    // 从文件尾部读取512个字节
    fseek(fp, -512, SEEK_END);
    fread(btBuffer, 1, 512, fp);

    // 对缓冲中的数据进行加密运算
    for (int i = 0; i < 512; i++)
    {
        btBuffer[i] ^= 0xc2;
    }

    // 再写回文件尾部
    fseek(fp, -512, SEEK_END);
    fwrite(btBuffer, 1, 512, fp);

    // 关闭文件
    fclose(fp);

    return true;
}

热点排行