[C++] 纯文本查看 复制代码
#include "stdafx.h"
#define BUF_SIZE 256
BOOL cci_f (LPCTSTR, LPCTSTR, DWORD);
VOID ReportError (LPCTSTR userMessage, DWORD exitCode, BOOL printErrorMessage)
{
DWORD eMsglen;
DWORD errNum = GetLastError();
LPTSTR lpvSysMsg;
_ftprintf(stderr, _T("%s\n"), userMessage);
if (printErrorMessage) {
eMsglen = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, errNum, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpvSysMsg, 0, NULL);
if (eMsglen > 0) {
_ftprintf(stderr, _T("%s\n"), lpvSysMsg);
}else {
_ftprintf (stderr, _T("Last Error Number: %d.\n"), errNum);
}
if (lpvSysMsg != NULL)
LocalFree(lpvSysMsg);
}
if (exitCode > 0)
ExitProcess(exitCode);
return;
}
int _tmain(int argc, _TCHAR* argv[])
{
if (argc != 4)
ReportError (_T("Usage: cci shift file1 file2"), 1, FALSE);
if (!cci_f(argv[2], argv[3], _wtoi(argv[1])))
ReportError(_T("Encryption failed."), 4, TRUE);
return 0;
}
BOOL cci_f (LPCTSTR fIn, LPCTSTR fOut, DWORD shift)
{
HANDLE hIn, hOut;
DWORD nIn, nOut, iCopy;
CHAR aBuffer[BUF_SIZE], ccBuffer[BUF_SIZE];
BOOL writeOK = TRUE;
hIn = CreateFile (fIn, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hIn == INVALID_HANDLE_VALUE)
return FALSE;
hOut = CreateFile (fOut, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hOut == INVALID_HANDLE_VALUE)
return FALSE;
while (ReadFile(hIn, aBuffer, BUF_SIZE, &nIn, NULL) && nIn > 0 && writeOK) {
for (iCopy = 0; iCopy < nIn; iCopy++)
ccBuffer[iCopy] = (aBuffer[iCopy] + shift) % 256;
writeOK = WriteFile(hOut, ccBuffer, nIn, &nOut, NULL);
}
CloseHandle(hIn);
CloseHandle(hOut);
return writeOK;
}