Skip to content

Instantly share code, notes, and snippets.

@bjartwolf
Last active September 4, 2015 07:47
Show Gist options
  • Save bjartwolf/36e23cc96988f3832e2e to your computer and use it in GitHub Desktop.
Save bjartwolf/36e23cc96988f3832e2e to your computer and use it in GitHub Desktop.
open System
open System.IO
open System.Collections.Generic
type StreamingFileThingy(filename: string) =
let bufferlength = 4096
let fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
let rec infStream = seq {
let buffer = Array.zeroCreate<byte> bufferlength
let bytesRead = fs.Read(buffer,0,bufferlength)
if not (bytesRead = bufferlength) then
let smallerbuffer = Array.zeroCreate<byte> bytesRead
Array.Copy(buffer,0,smallerbuffer,0,bytesRead)
yield! smallerbuffer
fs.Dispose()
else
yield! buffer
yield! infStream
}
interface IDisposable with
member this.Dispose() = fs.Dispose()
interface IEnumerable<byte> with
member this.GetEnumerator() = infStream.GetEnumerator()
@bjartwolf
Copy link
Author

This should be a computation expression and also it doesnt compile

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment