我正在尝试的是这样的事情:
let getFiles path = (directoryInfo path).GetFiles().ToList
但这给了我一个FileInfos列表而不是字符串列表。如何将其投影到字符串列表?
提前谢谢
答案 0 :(得分:6)
Lee给出的答案是正确的,但这更容易:
open System.IO
let filenames = Directory.EnumerateFiles path |> Seq.toList
Directory.EnumerateFiles会返回string seq
,但如果您对数组感到满意,则可以使用Directory.GetFiles代替。
答案 1 :(得分:4)
假设您想要与每个文件关联的路径:
let getFiles path = (directoryInfo path).GetFiles() |> Array.map (fun fi -> fi.FullName) |> List.ofSeq
请注意,这会创建一个F#列表,而不是System.Collections.Generic.List<string>
。如果您想创建其中一个,可以使用ResizeArray
:
let getFiles path = (DirectoryInfo path).GetFiles() |> Array.map (fun fi -> fi.FullName) |> (fun s -> ResizeArray<_>(s))
编辑:正如评论指出的那样,由于GetFiles
返回一个数组,您可以使用Array.map
并避免在不需要的情况下转换为列表/调整大小数组。