On this page:
open-input-file
open-output-file
open-input-output-file
call-with-input-file
call-with-output-file
call-with-input-file*
call-with-output-file*
with-input-from-file
with-output-to-file
port-file-identity
Version: 4.1
12.1.5 File Ports

A port created by open-input-file, open-output-file, subprocess, and related functions is a file-stream port. The initial input, output, and error ports in stand-alone MzScheme are also file-stream ports. The file-stream-port? predicate recognizes file-stream ports.

When an input or output file-stream port is created, it is placed into the management of the current custodian (see Custodians).

(open-input-file path [#:mode mode-flag])  input-port?

  path : path-string?

  mode-flag : (one-of/c 'binary 'text) = 'binary

Opens the file specified by path for input. The mode-flag argument specifies how the file’s bytes are translated on input:

Under Windows, 'text mode works only with regular files; attempting to use 'text with other kinds of files triggers an exn:fail:filesystem exception.

Otherwise, the file specified by path need not be a regular file. It might a device that is connected through the filesystem, such as "aux" under Windows or "/dev/null" under Unix. In all cases, the port is buffered by default.

The port produced by open-input-port should be explicitly closed, either though close-input-port or indirectly via custodian-shutdown-all, to release the OS-level file handle. The input port will not closed automatically if it is otherwise available for garbage collection (see Garbage Collection); a will could be associated input port to close it more automatically (see Wills and Executors).

A path value that is the cleansed version of path is used as the name of the opened port.

(open-output-file

 

path

 

 

 

 

 

 [

#:mode mode-flag

 

 

 

 

 

 

#:exists exists-flag])

 

 

output-port?

  path : path-string?

  mode-flag : (one-of/c 'binary 'text) = 'binary

  

exists-flag

 

:

 

(one-of/c 'error 'append 'update 'can-update

          'replace 'truncate

          'must-truncate 'truncate/replace)

 

 

 

=

 

'error

Opens the file specified by path for output. The mode-flag argument specifies how bytes written to the port are translated when written to the file:

Under Windows, 'text mode works only with regular files; attempting to use 'text with other kinds of files triggers an exn:fail:filesystem exception.

The exists-flag argument specifies how to handle/require files that already exist:

The file specified by path need not be a regular file. It might a device that is connected through the filesystem, such as "aux" under Windows or "/dev/null" under Unix. The output port is block-buffered by default, unless the file corresponds to a terminal, in which case is it line buffered bu default.

The port produced by open-output-port should be explicitly closed, either though close-output-port or indirectly via custodian-shutdown-all, to release the OS-level file handle. The output port will not closed automatically if it is otherwise available for garbage collection (see Garbage Collection); a will could be associated input port to close it more automatically (see Wills and Executors).

A path value that is the cleansed version of path is used as the name of the opened port.

(open-input-output-file

 

path

 

 

 [

#:mode mode-flag

 

 

 

#:exists exists-flag])

 

 

 

input-port?

 

output-port?

  path : path-string?

  mode-flag : (one-of/c 'binary 'text) = 'binary

  

exists-flag

 

:

 

(one-of/c 'error 'append 'update

          'replace 'truncate 'truncate/replace)

 

 

 

=

 

'error

Like open-output-file, but producing two values: an input port and an output port. The two ports are connected in that they share the underlying file device. This procedure is intended for use with special devices that can be opened by only one process, such as "COM1" in Windows. For regular files, sharing the device can be confusing. For example, using one port does not automatically flush the other port’s buffer, and reading or writing in one port moves the file position (if any) for the other port. For regular files, use separate open-input-file and open-output-file calls to avoid confusion.

(call-with-input-file

 

path

 

 

 

 

 

 

proc

 

 

 

 

 

 [

#:mode mode-flag])

 

 

any

  path : path-string?

  proc : (input-port? . -> . any)

  mode-flag : (one-of/c 'binary 'text) = 'binary

Calls open-input-port with the path and mode-flag arguments, and passes the resulting port to proc. The result of proc is the result of the call-with-input-file call, but the newly opened port is closed when thunk return.

(call-with-output-file

 

path

 

 

 

 

 

 

proc

 

 

 

 

 

 [

#:mode mode-flag

 

 

 

 

 

 

#:exists exists-flag])

 

 

any

  path : path-string?

  proc : (output-port? . -> . any)

  mode-flag : (one-of/c 'binary 'text) = 'binary

  

exists-flag

 

:

 

(one-of/c 'error 'append 'update

          'replace 'truncate 'truncate/replace)

 

 

 

=

 

'error

Analogous to call-with-input-file, but passing path, mode-flag and exists-flag to open-output-file.

(call-with-input-file*

 

path

 

 

 

 

 

 

proc

 

 

 

 

 

 [

#:mode mode-flag])

 

 

any

  path : path-string?

  proc : (input-port? . -> . any)

  mode-flag : (one-of/c 'binary 'text) = 'binary

Like call-with-input-file, but the newly opened port is closed whenever control escapes the the dynamic extent of the call-with-input-file* call, whether through proc’s return, a continuation application, or a prompt-based abort.

(call-with-output-file*

 

path

 

 

 

 

 

 

proc

 

 

 

 

 

 [

#:mode mode-flag

 

 

 

 

 

 

#:exists exists-flag])

 

 

any

  path : path-string?

  proc : (output-port? . -> . any)

  mode-flag : (one-of/c 'binary 'text) = 'binary

  

exists-flag

 

:

 

(one-of/c 'error 'append 'update

          'replace 'truncate 'truncate/replace)

 

 

 

=

 

'error

Like call-with-output-file, but the newly opened port is closed whenever control escapes the the dynamic extent of the call-with-output-file* call, whether through proc’s return, a continuation application, or a prompt-based abort.

(with-input-from-file

 

path

 

 

 

 

 

 

thunk

 

 

 

 

 

 [

#:mode mode-flag])

 

 

any

  path : path-string?

  thunk : (-> any)

  mode-flag : (one-of/c 'binary 'text) = 'binary

Like call-with-input-file*, but instead of passing the newly opened port to the given procedure argument, the port is installed as the current input port (see current-input-port) using parameterize around the call to thunk.

(with-output-to-file

 

path

 

 

 

 

 

 

thunk

 

 

 

 

 

 [

#:mode mode-flag

 

 

 

 

 

 

#:exists exists-flag])

 

 

any

  path : path-string?

  thunk : (-> any)

  mode-flag : (one-of/c 'binary 'text) = 'binary

  

exists-flag

 

:

 

(one-of/c 'error 'append 'update

          'replace 'truncate 'truncate/replace)

 

 

 

=

 

'error

Like call-with-output-file*, but instead of passing the newly opened port to the given procedure argument, the port is installed as the current output port (see current-output-port) using parameterize around the call to thunk.

(port-file-identity port)  any

  port : file-stream-port?

Returns an exact positive integer that represents the identity of the device and file read or written by file-stream-port. For two ports whose open times overlap, the result of port-file-identity is the same for both ports if and only if the ports access the same device and file. For ports whose open times do not overlap, no guarantee is provided for the port identities (even if the ports actually access the same file) – except as can be inferred through relationships with other ports. If file-stream-port is closed, the exn:fail exception is raised. Under Windows 95, 98, and Me, if file-stream-port is connected to a pipe instead of a file, the exn:fail:filesystem exception is raised.