Pooh_ писал(а):вы не допускаете возможности, что программа в своих действиях может полагаться не только на расширение файла, но и проверять, что он из себя представляет на самом деле?
Song777 писал(а):К чему тогда Ваши предложения по замене расширения?

а вообще - нефиг и допускать!
смотрим, к примеру, https://github.com/onyx-intl/crengine/b ... pubfmt.cpp и видим:
Код: Выделить всё
bool DetectEpubFormat( LVStreamRef stream )
{
LVContainerRef m_arc = LVOpenArchieve( stream );
if ( m_arc.isNull() )
return false; // not a ZIP archive
//dumpZip( m_arc );
// read "mimetype" file contents from root of archive
lString16 mimeType;
{
LVStreamRef mtStream = m_arc->OpenStream(L"mimetype", LVOM_READ );
if ( !mtStream.isNull() ) {
int size = mtStream->GetSize();
if ( size>4 && size<100 ) {
LVArray<char> buf( size+1, '\0' );
if ( mtStream->Read( buf.get(), size, NULL )==LVERR_OK ) {
for ( int i=0; i<size; i++ )
if ( buf[i]<32 || ((unsigned char)buf[i])>127 )
buf[i] = 0;
buf[size] = 0;
if ( buf[0] )
mimeType = Utf8ToUnicode( lString8( buf.get() ) );
}
}
}
}
if ( mimeType != L"application/epub+zip" )
return false;
return true;
}