在 F# 中调用 File.ReadAllBytes 方法
Calling the File.ReadAllBytes method in F#
这是我的代码示例:
let getAllBooks bookDirectory =
seq {yield! Directory.GetFiles(bookDirectory)}
|> Seq.map (fun eachFile -> eachFile.ReadAllBytes)
无法正常工作。怎么了?我应该写什么?
正如你在标题中所说,函数被调用File.ReadAllBytes
;)
它是 System.IO.File
class 的静态方法,因此必须在 File
类型上调用,而不是某些实例:
open System.IO
let getAllBooks bookDirectory =
seq {yield! Directory.GetFiles (bookDirectory) }
|> Seq.map (fun eachFile -> File.ReadAllBytes eachFile)
顺便说一下,这段代码可以改进,因为 GetFiles
的结果是一个数组,它也是一个 seq
:
open System.IO
let getAllBooks bookDirectory =
Directory.GetFiles bookDirectory
|> Seq.map (fun eachFile -> File.ReadAllBytes eachFile)
此外,您可以直接将 ReadAllBytes
函数传递给 map:
open System.IO
let getAllBooks bookDirectory =
Directory.GetFiles bookDirectory
|> Seq.map File.ReadAllBytes
最后,如果你愿意,你也可以去掉函数参数:
open System.IO
let getAllBooks =
Directory.GetFiles
>> Seq.map File.ReadAllBytes
评论更新:
I have an additional question: How may I convert a byte array into its numeric equivalent?
您可以使用 System.BitConverter
class 中的静态方法,例如 System.BitConverter.ToInt32
:
open System
let array = [| 0x00uy; 0x10uy; 0x00uy; 0x00uy |]
BitConverter.ToInt32 (array, 0)
|> printfn "Array as Int32: %d"
// Prints: Array as Int32: 4096
不要忽视里面的ToString
方法,它可以将字节数组转换为十六进制字符串:
BitConverter.ToString array
|> printfn "%s"
// Prints: 00-10-00-00
可以找到所有可用的转换方法on MSDN。
这是我的代码示例:
let getAllBooks bookDirectory =
seq {yield! Directory.GetFiles(bookDirectory)}
|> Seq.map (fun eachFile -> eachFile.ReadAllBytes)
无法正常工作。怎么了?我应该写什么?
正如你在标题中所说,函数被调用File.ReadAllBytes
;)
它是 System.IO.File
class 的静态方法,因此必须在 File
类型上调用,而不是某些实例:
open System.IO
let getAllBooks bookDirectory =
seq {yield! Directory.GetFiles (bookDirectory) }
|> Seq.map (fun eachFile -> File.ReadAllBytes eachFile)
顺便说一下,这段代码可以改进,因为 GetFiles
的结果是一个数组,它也是一个 seq
:
open System.IO
let getAllBooks bookDirectory =
Directory.GetFiles bookDirectory
|> Seq.map (fun eachFile -> File.ReadAllBytes eachFile)
此外,您可以直接将 ReadAllBytes
函数传递给 map:
open System.IO
let getAllBooks bookDirectory =
Directory.GetFiles bookDirectory
|> Seq.map File.ReadAllBytes
最后,如果你愿意,你也可以去掉函数参数:
open System.IO
let getAllBooks =
Directory.GetFiles
>> Seq.map File.ReadAllBytes
评论更新:
I have an additional question: How may I convert a byte array into its numeric equivalent?
您可以使用 System.BitConverter
class 中的静态方法,例如 System.BitConverter.ToInt32
:
open System
let array = [| 0x00uy; 0x10uy; 0x00uy; 0x00uy |]
BitConverter.ToInt32 (array, 0)
|> printfn "Array as Int32: %d"
// Prints: Array as Int32: 4096
不要忽视里面的ToString
方法,它可以将字节数组转换为十六进制字符串:
BitConverter.ToString array
|> printfn "%s"
// Prints: 00-10-00-00
可以找到所有可用的转换方法on MSDN。