Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- open System.IO
- module seqModule =
- let private canExecuteFunc(func) =
- fun e ->
- try
- func(e) |> ignore
- true
- with
- | _ -> false
- let private getFileList = fun (di:DirectoryInfo) -> di.GetFiles()
- let private openFileForRead = fun (fi:FileInfo) -> let fs = fi.OpenRead()
- fs.Close()
- let rec private getSubFolders(dirInfo:DirectoryInfo) =
- let dirLst = dirInfo.GetDirectories() |> Array.filter (canExecuteFunc(getFileList)) |> Seq.ofArray
- match Seq.isEmpty dirLst with
- | true -> seq { yield! Seq.empty }
- | false -> seq { yield! dirLst
- yield! Seq.map getSubFolders dirLst
- |> Seq.concat }
- let getFolders(path) =
- let di = new DirectoryInfo(path)
- seq { yield di
- yield! getSubFolders(di) }
- let getAllFiles(path) =
- let getFiles = fun (di:DirectoryInfo) -> di.GetFiles() |> Seq.ofArray |> Seq.filter (canExecuteFunc(openFileForRead))
- getFolders(path)
- |> Seq.map getFiles
- |> Seq.concat
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement