16,472
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include "atlenc.h"
int _tmain(int argc, _TCHAR* argv[])
{
errno_t err;
FILE *fr;
if (err =(fopen_s(&fr, "a.txt", "rb")) != 0)
{
printf( "The file 'a.txt' was not opened\n" );
return 0;
}
FILE *fw;
if (err = (fopen_s(&fw, "b.txt", "w+")) != 0)
{
printf( "The file 'b.txt' was not opened\n" );
return 0;
}
FILE *fd;
if (err = (fopen_s(&fd, "c.txt", "w+")) != 0)
{
printf( "The file 'c.txt' was not opened\n" );
return 0;
}
char srcbuf[50] = {0};
char dstbuf[50*2 + 1] = {0};
char orgbuf[50] = {0};
int nLen = 0;
long nTotal1 = 0;
long nTotal2 = 0;
//文件加密处理,这里没问题
while(!feof(fr))
{
nLen = fread(srcbuf, sizeof(char), sizeof(srcbuf), fr);
int i = Base64EncodeGetRequiredLength(nLen);
Base64Encode((BYTE*)srcbuf, nLen, dstbuf, &i, NULL);
fwrite(dstbuf, sizeof(char), i, fw);
nTotal1 += i;
}
printf("total file encode: %d\n", nTotal1);
fclose(fr);
fclose(fw);
memset(srcbuf, 0, sizeof(srcbuf));
memset(dstbuf, 0, sizeof(dstbuf));
memset(orgbuf, 0, sizeof(orgbuf));
fopen_s(&fw, "b.txt", "rb");
//文件解密处理,解密出来的文件跟原始文件有差距,文件越大,差距越明显
while(!feof(fw))
{
nLen = fread(srcbuf, sizeof(char), sizeof(srcbuf), fw);
printf("file read: %d\n", nLen);
int i = Base64DecodeGetRequiredLength(nLen);
printf("i encode: %d\n", i);
Base64Decode(srcbuf, nLen, (BYTE*)orgbuf, &i);
int m = fwrite(orgbuf, sizeof(char), i, fd);
nTotal2 += m;
}
printf("total file decode: %d\n", nTotal2);
fclose(fw);
fclose(fd);
return 0;
}
#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;
}