使用Atl Base64 对文件编解码

 

#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;
}


 

你可能感兴趣的:(File,null,include,byte)