Programmer's Reference

Determining the format of a file

Common Graphics provides methods to do the following:

The formatMatchesFileHandle:atOffset: class method answers true if the given file matches the receiver's format, false if it does not. For example, the following code tests whether the file named my-image.pcx is actually a PCX image file:

| file |
file := CfsFileDescriptor open: 'my-image.pcx' oflag: ORDONLY.
(CgPCXFileFormat formatMatchesFileHandle: file atOffset: 0)
    ifTrue: [Transcript cr; show: 'Format matches.']
    ifFalse: [Transcript cr; show: 'Format does not match.'].
file close

The formatMatchingFileHandle:atOffset:ifNone: class method determines which format matches the given file. It answers the appropriate file format class if a matching format was found. If one was not found, the block passed as the last argument is evaluated and its result is answered. The following code determines the format of the file named my-image.pcx:

| file formatClass |
file := CfsFileDescriptor open: 'my-image.pcx' oflag: ORDONLY.
formatClass := CgImageFileFormat
    formatMatchingFileHandle: file
    atOffset: 0
    ifNone: [file close. ^self error: 'No matching format found'].
file close.
Transcript cr; show: 'Matching format: ', formatClass printString

When the input is an array of ByteArrays, use the formatMatchesByteObjects:- offsetsIntoByteObjects: and formatMatchingByteObjects:offsetsIntoByteObjects:- ifNone: class methods.


[ Top of Page | Previous Page | Next Page | Table of Contents | Index ]