
Eric wrote:
Hello all,
Does anyone have some sample code for reading and writing to binary files?
openBinaryFile is a bit of a red herring. All it does is disable the line-ending interpretation which may or may not happen on some OSes when you open a file in text mode. For simple binary access to a file, just use hGetChar and friends. hGetChar is quite badly named (and typed) it is really hGetByte and it should really have type IO Word8. You can build up reading a few words at a time like this: hGetN :: Int -> Handle -> IO [Word8] hGetN n h = replicateM n (fmap (fromIntegral.fromEnum) (hGetChar h)) ...and so on. I wrote a naive binary file library for a simple binary format using this method, and it works fine. If you start to care about performance, you can use the Word8 versions of Data.Bytestring, which store the data more efficiently in memory and load it from the file more efficiently. You also benefit from a slightly cleaner API in a few of the corner cases. If you want a higher-level API over binary file access then Data.Binary is for you, but beware: Data.Binary is really two libraries. One part of it is for serialisation of haskell types to and from binary structures (you haven't said that is what you want, but maybe it is). However the other part is an abstraction over reading/writing binary files at all. That part is more closely related to your question. Jules