Как обработать ошибку JPEG # 41 - PullRequest
0 голосов
/ 08 марта 2012

У меня есть проект на C ++ Builder6.Есть OpenDialog, где я загружаю изображения в проект.Я бы хотел, чтобы мой проект был безопасным, и поскольку он принимает только изображения .jpg или .bmp, я решил наложить ограничение.Насколько я могу судить, я могу распознать файл .jpg, установив мой потоковый ридер на 4-ю позицию.Если я найду здесь «JFIF», это будет файл .jpeg.И так далее.Вот мой код

if(OpenDialog1->Execute()) 
{
    TFileStream *stream = new TFileStream(OpenDialog1->FileName, fmOpenRead);
    if(stream != NULL) 
    {
        if(stream->Size < 10) 
        {
            delete stream;
            return;
        }
        char str[10];
        stream->Read(str, 10);
        if(AnsiString(str + 6).SetLength(4)=="JFIF")
        {
            ShowMessage("It's jpeg");
        }
        else if ( AnsiString(str).SetLength(2)=="BM") {
            ShowMessage("It's bmp");
        }
        else
        {
            ShowMessage("It can not be downloaded");
            return;
        }
    }
    delete stream;
}

Но, к сожалению, этот код вызывает исключение из-за ошибки JPEG # 41, когда я помещаю здесь текстовый файл с переименованным расширением.

enter image description here

Так что моя идея не работает.Весь вопрос в следующем: могу ли я заставить мою программу возвращать сообщения об ошибках без использования метода try-catch?


Кстати, я понимаю, почему возникает исключение, потому что мой файл jpeg пуст.Но я бы хотел справиться с этим, используя мою собственную систему, а не стандартное исключение.

...