cpp Код:
const LPCWSTR testfile = L"testfile.txt";
LPCWSTR test1 = L"test simple text"; // Длина 16, вес = 32
SIZE_T size = _tcsclen(test1);
//size++;
SIZE_T size_in_bytes = sizeof(WCHAR)*size;
std::cout << " String size: " << size << "\n";
std::cout << " String size in bytes: " << size_in_bytes << "\n\n";
HANDLE hFile = CreateFile(testfile, GENERIC_READ | GENERIC_WRITE, NULL, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
SIZE_T size1 = GetFileSize(hFile, NULL);
std::cout << " File size: " << size1 << "\n\n ";
HANDLE hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, NULL, size1 + size_in_bytes, NULL);
LPCWSTR pvFile = (LPCWSTR)MapViewOfFile(hFileMapping, FILE_MAP_WRITE, NULL, NULL, NULL);
CopyMemory((LPVOID)(pvFile + size1), test1, size_in_bytes);
// очищаем все перед завершением
UnmapViewOfFile(pvFile);
CloseHandle(hFileMapping);
CloseHandle(hFile);
Программа работает так.
Вычисляем длину строки test1 = "test simple text", потом вычисляем размер в байтах.
Если файла "testfile.txt" нет, то создается новый.
Вычисляем длину файла "testfile.txt".
Даем физ памяти размером длина файла + длина строки "test simple text" в байтах.
Далее получаем указатель pvFile и пишем в конец файла строку либо если файл новый, то в начало.
1 скрин. Собственно при первом запуске все прекрасно работает.
2 скрин. При втором запуске появляются нули равные длине строки. Хотя должна была добавиться строка в конец первой строки.
Что не так?