使用Atl Base64 对文件编解码

来源:互联网 发布:软件维护手册 编辑:程序博客网 时间:2024/06/18 17:22

 

#include "atlenc.h"errno_t fileBase64Encode(const char *srcFile, const char *dstFile){  FILE *fr = NULL, *fw = NULL;  errno_t err = 0;    if(err == 0)  {    err= fopen_s(&fr, srcFile, "rb");    if(err != 0)    {      printf( "The file '%s' can't be open\n", srcFile );    }  }    if (err == 0)  {    err = fopen_s(&fw, dstFile, "wb");    if(err != 0)    {      printf( "The file '%s' can't be open\n", dstFile );    }  }  if(err == 0)  {    const int tLen = ATLSMTP_MAX_BASE64_LINE_LENGTH; // = 57    BYTE srcBuf[tLen + 1];    char dstBuf[tLen * 4 /3 + 5]; //+\r\n\r\n\0 //    size_t nTotal = 0;    while(!feof(fr))    {      int nLen = fread(srcBuf, 1, tLen, fr);      int i = Base64EncodeGetRequiredLength(nLen);      Base64Encode(srcBuf, nLen, dstBuf, &i);      nTotal += fwrite(dstBuf, 1, i, fw);           }  }  if(fr)    fclose(fr);  if(fw)    fclose(fw);  return err;}errno_t fileBase64Decode(const char *srcFile, const char *dstFile){  FILE *fr = NULL, *fw = NULL;  errno_t err = 0;    if(err == 0)  {    err= fopen_s(&fr, srcFile, "rb");    if(err != 0)    {      printf( "The file '%s' can't be open\n", srcFile );    }  }    if (err == 0)  {    err = fopen_s(&fw, dstFile, "wb");    if(err != 0)    {      printf( "The file '%s' can't be open\n", dstFile );    }  }  if(err == 0)  {    const int tLen = ATLSMTP_MAX_QP_LINE_LENGTH + 2; //76+2    char srcBuf[tLen+1];    BYTE dstBuf[tLen*3/4+1];    size_t nTotal = 0;    while(!feof(fr))    {      int nLen = fread(srcBuf, 1, tLen, fr);      int i = Base64DecodeGetRequiredLength(nLen);      Base64Decode(srcBuf, nLen, dstBuf, &i);      nTotal += fwrite(dstBuf, 1, i, fw);     }  }  if(fr)    fclose(fr);  if(fw)    fclose(fw);  return err;}


 

原创粉丝点击