wstringstream wss;
wifstream wif(basePath, ios::binary);
if (wif.is_open()) {
wss << wif.rdbuf();
wif.close();
}
wofstream wof(tempFileName, ios::binary);
if (wof.is_open()) {
wof << wss.str().data();
wof.close();
}
wss.str().data()
- это ты взял строковое представление данных и просто записал его в другой файл.Не понял суть вопроса
std
, ты себе яму роешь.std::wstringstream
- это не тот тип, что нужен тебе. Это объект абстракции над текстовым файлом с "широкой" кодировкой. Такой стрим оперирует строками с типом std::wstring
.std::basic_fstream
. Это то, что тебе нужно.wof << wss.str().data();
- стоит забыть про operator <<
.std
: 1, 2.Чтобы гуглить, нужно знать о чём гуглить, а тут проблема.
wifstream wif(tempName, ios::binary);
if (wif.is_open()) {
wif.seekg(0, wif.end);
size_t size = (size_t)wif.tellg();
wif.seekg(0, wif.beg);
wchar_t* encryptedData = new wchar_t[size];
wif.get(encryptedData, size);
wif.close();
delete[] encryptedData;
}
wfstream wif(L"logs.dat", ios::binary | ios::in);
if (wif.is_open()) {
wif.seekg(0, wif.end);
size_t size = (size_t)wif.tellg();
wif.seekg(0, wif.beg);
wchar_t* encryptedData = new wchar_t[size];
ZeroMemory(encryptedData, size);
wif.read(encryptedData, size);
wif.close();
wofstream wof(L"temp.dat", ios::binary);
if (wof.is_open()) {
wof.write(encryptedData, size);
wof.close();
}
delete[] encryptedData;
}
wchar_t* encryptedData = new wchar_t[size];
std::vector
. Еще тебе совершенно не нужен wchat_t
для работы с бинарным файлом. Лучше будет взять std::byte
, если тебе доступен C++17, или uint8_t
. Т.е. буферы будет лучше из однобайтовых составить.ZeroMemory(encryptedData, size)
занулит только size
байт, а не элементов, т.е. он пройдет только половину твоего текущего буфера.wif.read(encryptedData, size)
- тоже воспользуется лишь половиной буфера, т.к. зачитает size
байт, а не size
двубайтовых.wfstream
?wchar_t
передавать.std::basic_stream
со своим конструктором от широкой строки.std::basic_stream
говорит о том, в каких элементах следует интерпретировать тело файла.