let with_output_file ?(bin=false) x f = reset_readdir_cache_for (Filename.dirname x); let oc = (if bin then open_out_bin else open_out) x in try let res = f oc in close_out oc; res with e -> (close_out oc; raise e)