## Utilities

`val lines_of : string -> string BatEnum.t`

`lines_of name` reads the contents of file `name` as an enumeration of lines. The file is automatically closed once the last line has been reached or the enumeration is garbage-collected.

`val count_lines : string -> int`

`count_lines filename` count the number of lines in given file. Lines are read by the stdlib's input_line function.

- since 3.1.0

`val write_lines : string -> string BatEnum.t -> unit`

`write_lines name lines` writes strings given by `lines` to file `name` with newline character appended to each line.

`val size_of : string -> int`

`size_of name` returns the size of file `name` in bytes.

`val size_of_big : string -> Stdlib.Int64.t`

`size_of_big name` returns the size of file `name` in bytes, as a 64-bit integer.

This function is provided as the size of a file larger than 1 Gb cannot be represented with an `int` on a 32-bit machine.

## File permissions

File permissions are used when creating a file to allow controlling which users may read, write or open that file. To use a permission, create a value of type `permission` and pass it as argument to `open_in`, `open_out`, `with_file_in` or `with_file_out`.

`type permission`

The list of operations which are permitted on a file.

`val default_permission : permission`

Default permissions.

`val user_read : permission`

Give the current user permission to read the file. Ignored under Windows.

`val user_write : permission`

Give the current user permission to write the file

`val user_exec : permission`

Give the current user permission to execute the file. Ignored under Windows.

`val group_read : permission`

Give the permission to read the file to the group containing the user. Ignored under Windows.

`val group_write : permission`

Give the permission to write the file to the group containing the user. Ignored under Windows.

`val group_exec : permission`

Give the permission to execute the file to the group containing the user. Ignored under Windows.

`val other_read : permission`

Give the permission to read the file to the rest of the world. Ignored under Windows.

`val other_write : permission`

Give the permission to modify the file to the rest of the world. Ignored under Windows.

`val other_exec : permission`

Give the permission to execute the file to the rest of the world. Ignored under Windows.

`val perm : permission list -> permission`

Join permissions

`val unix_perm : int -> permission`

Create a permission from a Unix-style octal integer. See your favorite Unix documentation on `chmod` for more details.

- raises `Invalid_argument`

  if given number outside the `[0, 0o777]` range

`val set_permissions : string -> permission -> unit`

Set the permissions on a file.

`val chmod : string -> permission -> unit`

As `set_permissions`

## Opening a file for reading

`type open_in_flag = [`

1. `| `create`
2. `| `excl`
   (*

   Fail if the file exists and ``create` is set

   *)
3. `| `text`
   (*

   Open in ascii mode -- if this flag is not specified or if the operating system does not perform conversions, the file is opened in binary mode.

   *)
4. `| `nonblock`
   (*

   Open in non-blocking mode

   *)
5. `| `mmap`
   (*

   Open in memory-mapped mode (experimental)

   *)

`]`
`val open_in : ?mode:open_in_flag list -> ?perm:permission -> string -> BatInnerIO.input`

`open_in file_name` opens the file named `file_name` for reading.

Note You will need to close the file manually, with `BatIO.close_in`. An alternative is to call `with_file_in` instead of `open_in`.

Naming conventions for files are platform-dependent.

`val with_file_in : ?mode:open_in_flag list -> ?perm:permission -> string -> (BatInnerIO.input -> 'a) -> 'a`

`with_file_in file_name f` opens the file named `file_name` for reading, invokes `f` to process the contents of that file then, once `f` has returned or triggered an exception, closes the file before proceeding.

## Opening a file for writing

`type open_out_flag = [`

1. `| `append`
   (*

   Start writing at the end of the file rather than the start

   *)
2. `| `create`
   (*

   Create the file if it does not exist

   *)
3. `| `trunc`
   (*

   Empty the file if it already exists; on by default

   *)
4. `| `excl`
   (*

   Fail if the file exists and ``create` is set

   *)
5. `| `text`
   (*

   Open in ascii mode -- if this flag is not specified or if the operating system does not perform conversions, the file is opened in binary mode.

   *)
6. `| `nonblock`
   (*

   Open in non-blocking mode

   *)

`]`

Flags governing file output; they correspond to the relevant flags to the POSIX `open()` call. The default flags are `[`create; `trunc]`.

`val open_out : ?mode:open_out_flag list -> ?perm:permission -> string -> unit BatInnerIO.output`

`open_out file_name` opens the file named `file_name` for writing.

Note You will need to close the file manually, with `BatIO.close_out`. An alternative is to call `with_file_out` instead of `open_out`.

Naming conventions for files are platform-dependent.

`val with_file_out : ?mode:open_out_flag list -> ?perm:permission -> string -> (unit BatInnerIO.output -> 'a) -> 'a`

`with_file_out file_name f` opens the file named `file_name` for writing, invokes `f` to write onto that file then, once `f` has returned or triggered an exception, closes the file before proceeding.

## Opening a temporary file for writing

`type open_temporary_out_flag = [`

1. `| open_out_flag`
2. `| `delete_on_exit`
   (*

   Should the file be deleted when program ends?

   *)

`]`
`val open_temporary_out : ?mode:open_temporary_out_flag list -> ?prefix:string -> ?suffix:string -> ?temp_dir:string -> unit -> unit BatInnerIO.output * string`

`open_temporary_out ()` opens a new temporary file for writing.

- parameter prefix

  a string which should appear at the start of your temporary file name (by default `"ocaml"`)

- parameter suffix

  a string which should appear at the end of your temporary file name (by default `"tmp"`)

- parameter temp_dir

  indicates what temp dir to use

- returns

  The name of the file and the `output` for writing in it.

Note You will need to close the file manually. An alternative is to call `with_temporary_out` instead of `open_out`.

Naming conventions for files are platform-dependent.

`val with_temporary_out : ?mode:open_temporary_out_flag list -> ?prefix:string -> ?suffix:string -> ?temp_dir:string -> (unit BatInnerIO.output -> string -> 'a) -> 'a`

`with_temporary_out f` opens a new temporary file for writing, invokes `f` with to write onto that file then, once `f` has returned or triggered an exception, closes the file before proceeding.

- parameter prefix

  a string which should appear at the start of your temporary file name (by default `"ocaml"`)

- parameter suffix

  a string which should appear at the end of your temporary file name (by default `"tmp"`)

- parameter temp_dir

  indicates what temp dir to use

- returns

  The name of the file and the `output` for writing in it.

Naming conventions for files are platform-dependent.