2015-03-05 3 views
1

Вот пример моего кода:Вызов метода File.ReadAllBytes в F #

let getAllBooks bookDirectory = 
    seq {yield! Directory.GetFiles(bookDirectory)} 
    |> Seq.map (fun eachFile -> eachFile.ReadAllBytes) 

Это не работает. Что не так? Что я должен писать вместо этого?

ответ

3

Как ты сказал в названии, функция называется 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.

+0

Спасибо за очень ясное объяснение! Я прошу прощения, если мой вопрос натолкнулся на глупость - я новичок в программировании, и это мой первый опыт работы с языком .NET. У меня есть дополнительный вопрос: как преобразовать массив байтов в его числовой эквивалент? Заранее спасибо за вашу помощь. :-) –

+0

@MY_G, без проблем. Ваш вопрос был ясным и кратким, определенно не совсем глупым. :) –

+0

@MY_G, я обновил ответ на вопрос в вашем комментарии. –

Смежные вопросы