f#检查dir是否可访问无效

时间:2018-01-18 18:59:12

标签: f# directory

try (box (Directory.GetDirectories(dir) ))
with | :? System.UnauthorizedAccessException -> () 

我正在尝试检查该目录是否可访问,因此我不会收到“拒绝访问”错误,但它不起作用,它不会跳过循环

2 个答案:

答案 0 :(得分:3)

通常不鼓励将异常用作控制流程的一部分。在尝试枚举其内容之前,最好检查对目录的适当访问权限。尝试这样的事情:

$('a.nav.nav-item').click(() => {
  // # remove from existing
  $('a.nav.nav-item.selected').toggleClass('selected')
  $(this).toggleClass('selected') // # toggle selected on current el
})

答案 1 :(得分:0)

您可能还有其他一些问题,如果您有一个例外try-with块应该能够处理它,那么您实际上没有得到异常或在周围的代码中有其他问题。你为什么box

使用异常作为控制流的厌恶在.NET中是有意义的。在OCaml中,异常被广泛用于此目的,但它们很便宜。在.NET中,这在性能方面更昂贵。也就是说,有时候你确实想要抓住并处理异常,所以我不认为这是一个很大的问题。这例如有效:

open System.IO
let okdir = @"c:\tmp"
let baddir = @"L:\Finance"

let checkDir dir = 

    try 
        Directory.GetDirectories(dir) |> ignore
        printfn "%A" "Processed"
    with 
        | :? System.UnauthorizedAccessException as ex -> failwith ex.Message
        | :? System.IO.IOException as ex -> failwith ex.Message 
    //    | :? System.Exception as ex -> failwith ex.Message

checkDir okdir
//"Processed"
//val it : unit = ()

checkDir baddir
//System.Exception: Access to the path 'L:\Finance' is denied.