   """
   @spec chown!(Path.t, non_neg_integer) :: :ok | no_return
   def chown!(path, uid) do
-    path = IO.chardata_to_string(path)
     case chown(path, uid) do
       :ok -> :ok
       {:error, reason} ->
-        raise File.Error, reason: reason, action: "change owner for", path: path
+        raise File.Error, reason: reason, action: "change owner for",
+          path: IO.chardata_to_string(path)
     end
   end
 

  """
  @spec ls!(Path.t) :: [binary] | no_return
  def ls!(path \\ ".") do
    path = IO.chardata_to_string(path)
    case ls(path) do
      {:ok, value} -> value
      {:error, reason} ->
        raise File.Error, reason: reason, action: "list directory", path: path
    end
  end


  """
  @spec cp_r!(Path.t, Path.t, (Path.t, Path.t -> boolean)) :: [binary] | no_return
  def cp_r!(source, destination, callback \\ fn(_, _) -> true end) do
    case cp_r(source, destination, callback) do
      {:ok, files} -> files
      {:error, reason, file} ->
        raise File.CopyError, reason: reason, action: "copy recursively", on: file,
          source: IO.chardata_to_string(source), destination: IO.chardata_to_string(destination)
    end
  end

