module FuncTorrent.Fileops
(createDummyFile,
- writeFileAtOffset
+ writeFileAtOffset,
+ readFileAtOffset
) where
import Prelude hiding (writeFile)
import System.IO (withFile, hSeek, IOMode(..), SeekMode(..))
-import Data.ByteString (ByteString, writeFile, hPut)
+import System.Directory (doesFileExist)
+import Data.ByteString (ByteString, writeFile, hPut, hGet)
import qualified Data.ByteString.Char8 as BC (replicate)
createDummyFile :: FilePath -> Int -> IO ()
-createDummyFile path size =
- writeFile path (BC.replicate size '\0')
+createDummyFile path size = do
+ dfe <- doesFileExist path
+ if dfe
+ then return ()
+ else
+ writeFile path (BC.replicate size '\0')
-- write into a file at a specific offet
writeFileAtOffset :: FilePath -> Integer -> ByteString -> IO ()
withFile path ReadWriteMode (\h -> do
hSeek h AbsoluteSeek offset
hPut h block)
+readFileAtOffset :: FilePath -> Integer -> Integer -> IO ByteString
+readFileAtOffset path offset len =
+ withFile path ReadWriteMode (\h -> do
+ hSeek h AbsoluteSeek offset
+ hGet h (fromInteger len))