Portál AbcLinuxu, 23. dubna 2024 18:03
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++; } } } } }
si eště jakoby voprav to slovíčko 'readed' ;D
bufferSize = std::numeric_limits<DWORD>::max()
.
Tiskni Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.