От: | nen777w | ||
Дата: | 17.02.15 11:45 | ||
Оценка: |
std::ifstream in(path, std::ifstream::ate|std::ifstream::binary);
if(!in.good()) {
//WTF? для файлов больше 10Gb
}
if (!atendflag || fseek(fp, 0, SEEK_END) == 0)
return (fp); // no need to seek to end, or seek succeeded
fclose(fp); // can't position at end
return (0);
/*ГДЕ: osHandle - какой то 64 битный дискриптор равен: 0x20 (думаю валидный)
pos - 0
mthd - 2
*/
if ((osHandle = (HANDLE)_get_osfhandle(fh)) == (HANDLE)-1)
{
errno = EBADF;
_ASSERTE(("Invalid file descriptor",0));
return -1;
}
if ((newpos = SetFilePointer(osHandle, pos, NULL, mthd)) == -1)
dosretval = GetLastError(); <<-- UUUUPS....
else
dosretval = 0;
ERROR_INVALID_PARAMETER
87 (0x57)
The parameter is incorrect.
std::ifstream in(path, /*std::ifstream::ate|*/std::ifstream::binary);
if(!in.good()) {
return 0;
}
in.seekg(0, std::ifstream::end);
//и еще раз
if(!in.good()) {
return 0;
}
все ок!
Параметры всё те же, только заиспользовали LARGE_INTEGER newpos;
if ((osHandle = (HANDLE)_get_osfhandle(fh)) == (HANDLE)-1)
{
errno = EBADF;
_ASSERTE(("Invalid file descriptor. File possibly closed by a different thread",0));
return( -1i64 );
}
if (!SetFilePointerEx( osHandle,
*(PLARGE_INTEGER)&pos,
&newpos,
mthd) )
{
_dosmaperr( GetLastError() );
return( -1i64 );
}