Как ты сказал в названии, функция называется File.ReadAllBytes
;)
Это статический метод System.IO.File
класса, и, следовательно, должен быть вызван на 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
непосредственно на карту:
open System.IO
let getAllBooks bookDirectory =
Directory.GetFiles bookDirectory
|> Seq.map File.ReadAllBytes
Наконец, вы можете избавиться от параметра функции, а также, если вы хотите:
open System.IO
let getAllBooks =
Directory.GetFiles
>> Seq.map File.ReadAllBytes
Update для комментариев:
У меня есть дополнительный вопрос: как я могу преобразовать байт a rray в его числовой эквивалент?
Вы можете использовать статические методы в System.BitConverter
классе, например 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.
Спасибо за очень ясное объяснение! Я прошу прощения, если мой вопрос натолкнулся на глупость - я новичок в программировании, и это мой первый опыт работы с языком .NET. У меня есть дополнительный вопрос: как преобразовать массив байтов в его числовой эквивалент? Заранее спасибо за вашу помощь. :-) –
@MY_G, без проблем. Ваш вопрос был ясным и кратким, определенно не совсем глупым. :) –
@MY_G, я обновил ответ на вопрос в вашем комментарии. –