Advertisement
Guest User

Untitled

a guest
Aug 4th, 2014
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.22 KB | None | 0 0
  1. open System.IO
  2. module seqModule =
  3.     let private canExecuteFunc(func) =
  4.         fun e ->
  5.             try
  6.                 func(e) |> ignore
  7.                 true
  8.             with
  9.                 | _ -> false
  10.     let private getFileList = fun (di:DirectoryInfo) -> di.GetFiles()
  11.     let private openFileForRead = fun (fi:FileInfo) -> let fs = fi.OpenRead()
  12.                                                        fs.Close()
  13.  
  14.     let rec private getSubFolders(dirInfo:DirectoryInfo) =
  15.             let dirLst = dirInfo.GetDirectories() |> Array.filter (canExecuteFunc(getFileList)) |> Seq.ofArray
  16.             match Seq.isEmpty dirLst with
  17.                 | true  -> seq { yield! Seq.empty }
  18.                 | false -> seq { yield! dirLst
  19.                                  yield! Seq.map getSubFolders dirLst
  20.                                        |> Seq.concat }
  21.    
  22.     let getFolders(path) =
  23.         let di = new DirectoryInfo(path)
  24.         seq { yield di
  25.               yield! getSubFolders(di) }
  26.  
  27.     let getAllFiles(path) =
  28.         let getFiles = fun (di:DirectoryInfo) -> di.GetFiles() |> Seq.ofArray |> Seq.filter (canExecuteFunc(openFileForRead))
  29.         getFolders(path)
  30.         |> Seq.map getFiles
  31.         |> Seq.concat
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement