Portál AbcLinuxu, 30. října 2025 19:06
std::string ReadLine() const
{
constexpr size_t BUFF_SIZE = 1024;
char* buffer = new char[BUFF_SIZE];
char* pointer = buffer;
DWORD readedBytes, length = 0;
auto line = std::string();
while (true) {
if (ReadFile(handle, pointer, static_cast<DWORD>(1), &readedBytes, nullptr))
{
if (*pointer == '\r' || *pointer == '\n' || readedBytes == 0)
{
line.append(buffer, length);
pointer = nullptr;
delete[] buffer;
return line;
}
else
{
if (length == BUFF_SIZE) {
line.append(buffer, length);
length = 0;
pointer = buffer;
}
else {
pointer++;
length++;
}
}
}
else {
delete[] buffer;
throw SomeException();
}
}
}
Řešení dotazu:
char c; ... ReadFile(handle, &c, 1, &readedBytes, nullptr) ... line.append(c);
std::string ReadLine(const size_t bufferSize = 1024) const
{
char* buffer = new char[bufferSize + 1];
char* pointer = buffer;
DWORD readedBytes, length = 0;
auto line = std::string();
while (true) {
if (ReadFile(handle, pointer, static_cast<DWORD>(1), &readedBytes, nullptr))
{
if (*pointer == 'r' || *pointer == 'n' || readedBytes == 0)
{
line.append(buffer, length);
pointer = nullptr;
delete[] buffer;
return line;
}
else
{
if (length == bufferSize) {
line.append(buffer, length + 1);
length = 0;
pointer = buffer;
}
else {
pointer++;
length++;
}
}
}
}
}
bufferSize = std::numeric_limits<DWORD>::max().
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.