C ++: fopen () возвращает дескриптор пустого файла

Я получаю странный дескриптор файла от fopen; сам указатель не NULL, но файл, который он представляет, не имеет размера, и feof(file) уже установлено … что может быть причиной этого?

(Я трижды проверил сам файл, он существует, имеет данные, и права доступа к файлу в порядке … и filename устанавливается в «source / test_file.object.txt»)

bool tagFile(const char * filename){
FILE * file = fopen(filename, "r");
if(file == NULL){                        // file is not NULL
printf("   Couldn't open the file %s", filename);
return false;
}
int size = fseek(file, 0, SEEK_END); // size is 0
rewind(file);
while(feof(file)){

....  // never executes because feof(file) fails
}
}
0x002cc410  // value of 'file' in the debugger
_ptr=0x00000000 <Bad Ptr>
_cnt=0
_base=0x00000000 <Bad Ptr>
_flag = 1
_file = 3

1

Решение

Наиболее распространенная причина этого — просто открыть пустой файл. Там нет байтов для чтения, поэтому EOF немедленно, но файл существует так fopen не может вернуть NULL.

0

Другие решения

Других решений пока нет …