Я пытаюсь сделать программу, используя Windows API в C ++
Цель состоит в том, чтобы прочитать содержимое текстового файла, который я создал, и который может манипулировать содержимым с помощью побитового XOR (изменение в нижний и верхний регистры, и наоборот), а затем снова поместить содержимое в текстовый файл.
Вот поток программы, которую я использовал:
- Открыть текстовый файл с помощью CreateFile.
- Поместить содержимое текстового файла в созданный malloc.
- Управление содержимым текстового файла с использованием побитового XOR (xor = 20).
- Затем снова поместите значение xor в текстовый файл.
Вот код:
#include "pch.h"
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
HANDLE openFile;
HANDLE ovewriFile;
BOOL readwriFile;
DWORD dwNoByteRead = 0;
DWORD dwNoByteWritten = 0;
char *strVal;
//allocate memory
strVal = (char*)malloc(sizeof(strVal));
memset(strVal, '0x00', sizeof(strVal));
//open a file
openFile = CreateFile(L"C:\\Users\\John.Doe\\Documents\\test.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
//reading the content
readwriFile = ReadFile(openFile, strVal, 34, &dwNoByteRead, NULL);
cout << "original content is " << strVal << endl;
CloseHandle(openFile);
//manipulate data using xor
for (int i = 0; i != strlen(strVal); i++) {
if (strVal[i] == 0x20)
{
continue;
}
strVal[i] ^= 0x20;
}
cout << "xor value: " << strVal << endl;
//overwrite a file
ovewriFile = CreateFile(L"C:\\Users\\farrel.moje\\Documents\\test.txt", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
//write the content
readwriFile = WriteFile(ovewriFile, strVal, 34, &dwNoByteWritten, NULL);
//just a way to know if successful yung writefile
if (readwriFile == FALSE) {
cout << "ERROR WRITING " << GetLastError() << endl;
}
else {
cout << "Success Overwrite " << endl;
}
cout << "Modified content " << strVal << endl;
CloseHandle(ovewriFile);
free(strVal);
return 0;
}
Эта программа работает, но когда я попытался изменить nNumberOfBytesToRead (максимальное число байтов для чтения) с 34 на sizeof (strVal) или strlen (strVal)
readwriFile = ReadFile (openFile, strVal, 34, & dwNoByteRead, NULL);
, но используя sizeof и strlen, он не отображал полное содержание текстового файла.
Есть ли способ, которым я больше не могу объявить определенное количество байтов для чтения?
Заранее спасибо!