fstream 포인터 fileP_가 있습니다. 그래서 여기 내가 파일의 오프셋 @offset
부터 @buffer
에서 @size
을 읽을
int Read(size_t offset, char *buffer, size_t *size)
: 나는 같은 그것의 정의와 Read()
기능이
fileP_.open(filePath_.c_str(), std::ios::in|std::ios::binary);
:
내가 가진 파일을 엽니 다.
Read()
의 내 코드는 다소 다음과 같이이다 :오프셋이 파일 크기를 초과하더라도 eof 비트가 설정되지 않습니다.
int rc = 0
fileP_.seekg(offset);
fileP_.read(buffer, *size);
if (!fileP_.gcount()) {
if (fileP_.eof())
*size = rc;
else if (fileP_.fail())
rc = -EIO;
....
코드는 offset < filesize
때까지 잘 작동하지만 내가 offset > filesize
을 주면 gcount()
내가 -EIO
을 얻고, 내가 기대 0
을 제공합니다 (예상되는)하지만 offset > filesize
size = rc = 0
경우 .
위 코드에서 아무 것도 누락 되었습니까?
감사합니다.
작업이 실패하면 실패 비트가 설정되고 읽기가 작동하지 않습니다. (eof가 설정되지 않았습니다.) – EFenix
오, 저는 C++을 처음 접했고, 저의 경우 혼란 스럽습니다. 비트가 있습니다. seekg() 후에 failbit이 설정되었는지 확인하도록 코드를 변경했습니다. 고마워요! –
@AntonioGarrido 수표를 놓친 경우 위 코드에서 더 이상 수표가 필요하면 @AntonioGarrido 안내해 주시겠습니까? –