(* Copie d'un fichier, avec gestion correcte des erreurs lorsque l'un ou
   l'autre des fichiers ne peut être ouvert.

   Le premier des deux fichiers peut ne pas être ouvert s'il n'existe
   pas mais aussi s'il s'agit d'un répertoire ou qu'on n'a pas la
   permission de le lire. Ces deux dernières erreurs s'appliquent
   également au second fichier.

   Dans tous les cas, cela se manifeste pas l'exception Sys_error.
   On affiche alors le message qu'elle transporte en argument, avant
   de terminer avec exit 1. *)

let copy_file f1 f2 =
  let c1 = open_in f1 in
  let c2 = open_out f2 in
  try
    while true do output_char c2 (input_char c1) done
  with End_of_file ->
    close_in c1; close_out c2

let () =
  try
    copy_file Sys.argv.(1) Sys.argv.(2)
  with Sys_error s ->
    Printf.eprintf "error: %s" s;
    exit 1

This document was generated using caml2html