因为你输出i没在循环里面
也就是说你的for循环没用括号只会执行下面的一行
你有一个for循环会循环输出五次*
然后最后再输出一次i,
code里写得很清楚,先输出5个*,接着输出i的值,最后i=6
这部分内容与加密文件相似,首先解析加密头,然后对加密数据进行解析后保存即可。
解析源码:
//解密文件
bool DataOperation_::DecryptionFile(CString Filename,bool bCover)
{
if (Filename.IsEmpty())
return false;
CFile file1,file2;
if (!file1.Open(Filename,CFile::modeRead))
return false;
ULONG64 FileLen = file1.GetLength();
if (512 >= FileLen)
return false;
CString Filename2(Filename.Mid(0,Filename.ReverseFind(_T('.'))));
Filename2.AppendFormat(_T("_Temp%s"),Filename.Mid(Filename.ReverseFind(_T('.')),
Filename.GetLength() - Filename.ReverseFind(_T('.'))));
if (!file2.Open(Filename2,CFile::modeCreate | CFile::modeWrite))
return false;
char StrData[2048 + 100] = {0};
int DataLen = 0;
file1.Read(StrData,512);
//解密数据头
int DecryptionLen = 0;
int HeadLen = 0;
if (DecryptionLen = DecryptHeadLen(StrData, HeadLen))
{
file1.Seek(HeadLen, CFile::begin);
FileLen -= HeadLen;
}
else
{
bCover = false;
goto Exit;
}
while (0 < FileLen)
{
if (DecryptionLen <= FileLen)
{
DataLen = DecryptionLen;
file1.Read(StrData,DataLen);
char *WriteFile = DecryptionData(StrData,DataLen);
memset(StrData,0,strlen(StrData));
memcpy(StrData,WriteFile,DataLen);
file2.Write(StrData,DataLen);
FileLen -= DecryptionLen;
}
else
{
DataLen = FileLen;
file1.Read(StrData,FileLen);
char *WriteFile = DecryptionData(StrData,DataLen);
memset(StrData,0,strlen(StrData));
memcpy(StrData,WriteFile,DataLen);
file2.Write(StrData,DataLen);
FileLen -= FileLen;
break;
}
}
Exit:
file1.Close();
file2.Close();
if (bCover)
{
USES_CONVERSION;
//覆盖本地文件
int nResult = remove(T2A(Filename));
nResult = rename(T2A(Filename2),T2A(Filename));
}
return true;
}