wchar_t
? char
, то это строка в ASCII. Если тип - wchar_t
, то это строка в UTF-16/UCS2. Если буфер должен содержать сырые произвольные данные, то его тип будет std::byte
.std::vector
, или - std::array
, или - std::span
. Иначе это будет бессмысленный блок памяти, в который требуется внести смысл - т.е. переписать на осмысленный код.как отправить post запросом картинку или любой другой файл через wininet
wchar_t* loadFile(const wchar_t* fname) {
wifstream ifs(fname, ios::binary);
if (ifs.is_open()) {
ifs.seekg(0, ios::end);
size_t len = (size_t)ifs.tellg();
ifs.seekg(0, ios::beg);
wchar_t* data = new wchar_t[len];
ZeroMemory(data, len);
ifs.read(data, len);
ifs.close();
return data;
}
}
typedef std::basic_ofstream<BYTE, std::char_traits<BYTE>> bofstream;
std::byte
. И от new wchar_t[len]
стоит тоже отказаться в пользу std::vector<std::byte>
.ZeroMemory(data, len)
делает фиктивную работу - только время тратит, т.к. следом буфер перезаписывается из файла.ZeroMemory
зануляет только половину буфера, т.к. параметр длины задается в байтах, а буфер у тебя из двухбайтовых.std::vector<std::byte> ReadImage( const std::wstring_view file_path )
является более осмысленной. Слово Load - это загрузка, в отношении файлов применяется к загрузке готового формата данных. Read - простое чтение данных без разбора формата. Собственно формат у тебя не разбирается, поэтому и не Load. Результатом является блок байт с известной длиной, т.е. просто будет возвращено содержимое файла. file_path
однозначно говорит, откуда будет прочитан результат, константность говорит о том, что file_path
в функции используется как есть и, стало быть, функция является чистой.