File: Stdlib.Filename.html

package info (click to toggle)
ocaml-doc 4.11-2
  • links: PTS, VCS
  • area: non-free
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 20,580 kB
  • sloc: sh: 37; makefile: 11
file content (372 lines) | stat: -rw-r--r-- 22,616 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" href="style.css" type="text/css">
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="Start" href="index.html">
<link rel="previous" href="Stdlib.Ephemeron.html">
<link rel="next" href="Stdlib.Float.html">
<link rel="Up" href="Stdlib.html">
<link title="Index of types" rel=Appendix href="index_types.html">
<link title="Index of extensions" rel=Appendix href="index_extensions.html">
<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
<link title="Index of values" rel=Appendix href="index_values.html">
<link title="Index of modules" rel=Appendix href="index_modules.html">
<link title="Index of module types" rel=Appendix href="index_module_types.html">
<link title="Arg" rel="Chapter" href="Arg.html">
<link title="Array" rel="Chapter" href="Array.html">
<link title="ArrayLabels" rel="Chapter" href="ArrayLabels.html">
<link title="Bigarray" rel="Chapter" href="Bigarray.html">
<link title="Bool" rel="Chapter" href="Bool.html">
<link title="Buffer" rel="Chapter" href="Buffer.html">
<link title="Bytes" rel="Chapter" href="Bytes.html">
<link title="BytesLabels" rel="Chapter" href="BytesLabels.html">
<link title="Callback" rel="Chapter" href="Callback.html">
<link title="CamlinternalFormat" rel="Chapter" href="CamlinternalFormat.html">
<link title="CamlinternalFormatBasics" rel="Chapter" href="CamlinternalFormatBasics.html">
<link title="CamlinternalLazy" rel="Chapter" href="CamlinternalLazy.html">
<link title="CamlinternalMod" rel="Chapter" href="CamlinternalMod.html">
<link title="CamlinternalOO" rel="Chapter" href="CamlinternalOO.html">
<link title="Char" rel="Chapter" href="Char.html">
<link title="Complex" rel="Chapter" href="Complex.html">
<link title="Condition" rel="Chapter" href="Condition.html">
<link title="Digest" rel="Chapter" href="Digest.html">
<link title="Dynlink" rel="Chapter" href="Dynlink.html">
<link title="Ephemeron" rel="Chapter" href="Ephemeron.html">
<link title="Event" rel="Chapter" href="Event.html">
<link title="Filename" rel="Chapter" href="Filename.html">
<link title="Float" rel="Chapter" href="Float.html">
<link title="Format" rel="Chapter" href="Format.html">
<link title="Fun" rel="Chapter" href="Fun.html">
<link title="Gc" rel="Chapter" href="Gc.html">
<link title="Genlex" rel="Chapter" href="Genlex.html">
<link title="Hashtbl" rel="Chapter" href="Hashtbl.html">
<link title="Int" rel="Chapter" href="Int.html">
<link title="Int32" rel="Chapter" href="Int32.html">
<link title="Int64" rel="Chapter" href="Int64.html">
<link title="Lazy" rel="Chapter" href="Lazy.html">
<link title="Lexing" rel="Chapter" href="Lexing.html">
<link title="List" rel="Chapter" href="List.html">
<link title="ListLabels" rel="Chapter" href="ListLabels.html">
<link title="Map" rel="Chapter" href="Map.html">
<link title="Marshal" rel="Chapter" href="Marshal.html">
<link title="MoreLabels" rel="Chapter" href="MoreLabels.html">
<link title="Mutex" rel="Chapter" href="Mutex.html">
<link title="Nativeint" rel="Chapter" href="Nativeint.html">
<link title="Obj" rel="Chapter" href="Obj.html">
<link title="Ocaml_operators" rel="Chapter" href="Ocaml_operators.html">
<link title="Oo" rel="Chapter" href="Oo.html">
<link title="Option" rel="Chapter" href="Option.html">
<link title="Parsing" rel="Chapter" href="Parsing.html">
<link title="Printexc" rel="Chapter" href="Printexc.html">
<link title="Printf" rel="Chapter" href="Printf.html">
<link title="Queue" rel="Chapter" href="Queue.html">
<link title="Random" rel="Chapter" href="Random.html">
<link title="Result" rel="Chapter" href="Result.html">
<link title="Scanf" rel="Chapter" href="Scanf.html">
<link title="Seq" rel="Chapter" href="Seq.html">
<link title="Set" rel="Chapter" href="Set.html">
<link title="Spacetime" rel="Chapter" href="Spacetime.html">
<link title="Stack" rel="Chapter" href="Stack.html">
<link title="StdLabels" rel="Chapter" href="StdLabels.html">
<link title="Stdlib" rel="Chapter" href="Stdlib.html">
<link title="Str" rel="Chapter" href="Str.html">
<link title="Stream" rel="Chapter" href="Stream.html">
<link title="String" rel="Chapter" href="String.html">
<link title="StringLabels" rel="Chapter" href="StringLabels.html">
<link title="Sys" rel="Chapter" href="Sys.html">
<link title="Thread" rel="Chapter" href="Thread.html">
<link title="ThreadUnix" rel="Chapter" href="ThreadUnix.html">
<link title="Uchar" rel="Chapter" href="Uchar.html">
<link title="Unit" rel="Chapter" href="Unit.html">
<link title="Unix" rel="Chapter" href="Unix.html">
<link title="UnixLabels" rel="Chapter" href="UnixLabels.html">
<link title="Weak" rel="Chapter" href="Weak.html"><title>Stdlib.Filename</title>
</head>
<body>
<div class="navbar"><a class="pre" href="Stdlib.Ephemeron.html" title="Stdlib.Ephemeron">Previous</a>
&nbsp;<a class="up" href="Stdlib.html" title="Stdlib">Up</a>
&nbsp;<a class="post" href="Stdlib.Float.html" title="Stdlib.Float">Next</a>
</div>
<h1>Module <a href="type_Stdlib.Filename.html">Stdlib.Filename</a></h1>

<pre><span id="MODULEFilename"><span class="keyword">module</span> Filename</span>: <code class="type"><a href="Filename.html">Filename</a></code></pre><hr width="100%">

<pre><span id="VALcurrent_dir_name"><span class="keyword">val</span> current_dir_name</span> : <code class="type">string</code></pre><div class="info ">
<div class="info-desc">
<p>The conventional name for the current directory (e.g. <code class="code">.</code> in Unix).</p>
</div>
</div>

<pre><span id="VALparent_dir_name"><span class="keyword">val</span> parent_dir_name</span> : <code class="type">string</code></pre><div class="info ">
<div class="info-desc">
<p>The conventional name for the parent of the current directory
   (e.g. <code class="code">..</code> in Unix).</p>
</div>
</div>

<pre><span id="VALdir_sep"><span class="keyword">val</span> dir_sep</span> : <code class="type">string</code></pre><div class="info ">
<div class="info-desc">
<p>The directory separator (e.g. <code class="code">/</code> in Unix).</p>
</div>
<ul class="info-attributes">
<li><b>Since</b> 3.11.2</li>
</ul>
</div>

<pre><span id="VALconcat"><span class="keyword">val</span> concat</span> : <code class="type">string -> string -> string</code></pre><div class="info ">
<div class="info-desc">
<p><code class="code">concat&nbsp;dir&nbsp;file</code> returns a file name that designates file
   <code class="code">file</code> in directory <code class="code">dir</code>.</p>
</div>
</div>

<pre><span id="VALis_relative"><span class="keyword">val</span> is_relative</span> : <code class="type">string -> bool</code></pre><div class="info ">
<div class="info-desc">
<p>Return <code class="code"><span class="keyword">true</span></code> if the file name is relative to the current
   directory, <code class="code"><span class="keyword">false</span></code> if it is absolute (i.e. in Unix, starts
   with <code class="code">/</code>).</p>
</div>
</div>

<pre><span id="VALis_implicit"><span class="keyword">val</span> is_implicit</span> : <code class="type">string -> bool</code></pre><div class="info ">
<div class="info-desc">
<p>Return <code class="code"><span class="keyword">true</span></code> if the file name is relative and does not start
   with an explicit reference to the current directory (<code class="code">./</code> or
   <code class="code">../</code> in Unix), <code class="code"><span class="keyword">false</span></code> if it starts with an explicit reference
   to the root directory or the current directory.</p>
</div>
</div>

<pre><span id="VALcheck_suffix"><span class="keyword">val</span> check_suffix</span> : <code class="type">string -> string -> bool</code></pre><div class="info ">
<div class="info-desc">
<p><code class="code">check_suffix&nbsp;name&nbsp;suff</code> returns <code class="code"><span class="keyword">true</span></code> if the filename <code class="code">name</code>
    ends with the suffix <code class="code">suff</code>.</p>

<p>Under Windows ports (including Cygwin), comparison is
    case-insensitive, relying on <code class="code"><span class="constructor">String</span>.lowercase_ascii</code>.  Note that
    this does not match exactly the interpretation of case-insensitive
    filename equivalence from Windows.</p>
</div>
</div>

<pre><span id="VALchop_suffix"><span class="keyword">val</span> chop_suffix</span> : <code class="type">string -> string -> string</code></pre><div class="info ">
<div class="info-desc">
<p><code class="code">chop_suffix&nbsp;name&nbsp;suff</code> removes the suffix <code class="code">suff</code> from
   the filename <code class="code">name</code>. The behavior is undefined if <code class="code">name</code> does not
   end with the suffix <code class="code">suff</code>. <code class="code">chop_suffix_opt</code> is thus recommended
   instead.</p>
</div>
</div>

<pre><span id="VALchop_suffix_opt"><span class="keyword">val</span> chop_suffix_opt</span> : <code class="type">suffix:string -> string -> string option</code></pre><div class="info ">
<div class="info-desc">
<p><code class="code">chop_suffix_opt&nbsp;~suffix&nbsp;filename</code> removes the suffix from
    the <code class="code">filename</code> if possible, or returns <code class="code"><span class="constructor">None</span></code> if the
    filename does not end with the suffix.</p>

<p>Under Windows ports (including Cygwin), comparison is
    case-insensitive, relying on <code class="code"><span class="constructor">String</span>.lowercase_ascii</code>.  Note that
    this does not match exactly the interpretation of case-insensitive
    filename equivalence from Windows.</p>
</div>
<ul class="info-attributes">
<li><b>Since</b> 4.08</li>
</ul>
</div>

<pre><span id="VALextension"><span class="keyword">val</span> extension</span> : <code class="type">string -> string</code></pre><div class="info ">
<div class="info-desc">
<p><code class="code">extension&nbsp;name</code> is the shortest suffix <code class="code">ext</code> of <code class="code">name0</code> where:</p>

<ul>
<li><code class="code">name0</code> is the longest suffix of <code class="code">name</code> that does not
      contain a directory separator;</li>
<li><code class="code">ext</code> starts with a period;</li>
<li><code class="code">ext</code> is preceded by at least one non-period character
      in <code class="code">name0</code>.</li>
</ul>
<p>If such a suffix does not exist, <code class="code">extension&nbsp;name</code> is the empty
    string.</p>
</div>
<ul class="info-attributes">
<li><b>Since</b> 4.04</li>
</ul>
</div>

<pre><span id="VALremove_extension"><span class="keyword">val</span> remove_extension</span> : <code class="type">string -> string</code></pre><div class="info ">
<div class="info-desc">
<p>Return the given file name without its extension, as defined
    in <a href="Filename.html#VALextension"><code class="code"><span class="constructor">Filename</span>.extension</code></a>. If the extension is empty, the function
    returns the given file name.</p>

<p>The following invariant holds for any file name <code class="code">s</code>:</p>

<p><code class="code">remove_extension&nbsp;s&nbsp;^&nbsp;extension&nbsp;s&nbsp;=&nbsp;s</code></p>
</div>
<ul class="info-attributes">
<li><b>Since</b> 4.04</li>
</ul>
</div>

<pre><span id="VALchop_extension"><span class="keyword">val</span> chop_extension</span> : <code class="type">string -> string</code></pre><div class="info ">
<div class="info-desc">
<p>Same as <a href="Filename.html#VALremove_extension"><code class="code"><span class="constructor">Filename</span>.remove_extension</code></a>, but raise <code class="code"><span class="constructor">Invalid_argument</span></code>
    if the given name has an empty extension.</p>
</div>
</div>

<pre><span id="VALbasename"><span class="keyword">val</span> basename</span> : <code class="type">string -> string</code></pre><div class="info ">
<div class="info-desc">
<p>Split a file name into directory name / base file name.
   If <code class="code">name</code> is a valid file name, then <code class="code">concat&nbsp;(dirname&nbsp;name)&nbsp;(basename&nbsp;name)</code>
   returns a file name which is equivalent to <code class="code">name</code>. Moreover,
   after setting the current directory to <code class="code">dirname&nbsp;name</code> (with <a href="Sys.html#VALchdir"><code class="code"><span class="constructor">Sys</span>.chdir</code></a>),
   references to <code class="code">basename&nbsp;name</code> (which is a relative file name)
   designate the same file as <code class="code">name</code> before the call to <a href="Sys.html#VALchdir"><code class="code"><span class="constructor">Sys</span>.chdir</code></a>.</p>

<p>This function conforms to the specification of POSIX.1-2008 for the
   <code class="code">basename</code> utility.</p>
</div>
</div>

<pre><span id="VALdirname"><span class="keyword">val</span> dirname</span> : <code class="type">string -> string</code></pre><div class="info ">
<div class="info-desc">
<p>See <a href="Filename.html#VALbasename"><code class="code"><span class="constructor">Filename</span>.basename</code></a>.
   This function conforms to the specification of POSIX.1-2008 for the
   <code class="code">dirname</code> utility.</p>
</div>
</div>

<pre><span id="VALnull"><span class="keyword">val</span> null</span> : <code class="type">string</code></pre><div class="info ">
<div class="info-desc">
<p><code class="code">null</code> is <code class="code"><span class="string">"/dev/null"</span></code> on POSIX and <code class="code"><span class="string">"NUL"</span></code> on Windows. It represents a
    file on the OS that discards all writes and returns end of file on reads.</p>
</div>
<ul class="info-attributes">
<li><b>Since</b> 4.10.0</li>
</ul>
</div>

<pre><span id="VALtemp_file"><span class="keyword">val</span> temp_file</span> : <code class="type">?temp_dir:string -> string -> string -> string</code></pre><div class="info ">
<div class="info-desc">
<p><code class="code">temp_file&nbsp;prefix&nbsp;suffix</code> returns the name of a
   fresh temporary file in the temporary directory.
   The base name of the temporary file is formed by concatenating
   <code class="code">prefix</code>, then a suitably chosen integer number, then <code class="code">suffix</code>.
   The optional argument <code class="code">temp_dir</code> indicates the temporary directory
   to use, defaulting to the current result of <a href="Filename.html#VALget_temp_dir_name"><code class="code"><span class="constructor">Filename</span>.get_temp_dir_name</code></a>.
   The temporary file is created empty, with permissions <code class="code">0o600</code>
   (readable and writable only by the file owner).  The file is
   guaranteed to be different from any other file that existed when
   <code class="code">temp_file</code> was called.</p>
</div>
<ul class="info-attributes">
<li><b>Before 3.11.2 </b> no ?temp_dir optional argument</li>
<li><b>Raises</b> <code>Sys_error</code> if the file could not be created.</li>
</ul>
</div>

<pre><span id="VALopen_temp_file"><span class="keyword">val</span> open_temp_file</span> : <code class="type">?mode:<a href="Stdlib.html#TYPEopen_flag">open_flag</a> list -><br>       ?perms:int -><br>       ?temp_dir:string -> string -> string -> string * <a href="Stdlib.html#TYPEout_channel">out_channel</a></code></pre><div class="info ">
<div class="info-desc">
<p>Same as <a href="Filename.html#VALtemp_file"><code class="code"><span class="constructor">Filename</span>.temp_file</code></a>, but returns both the name of a fresh
   temporary file, and an output channel opened (atomically) on
   this file.  This function is more secure than <code class="code">temp_file</code>: there
   is no risk that the temporary file will be modified (e.g. replaced
   by a symbolic link) before the program opens it.  The optional argument
   <code class="code">mode</code> is a list of additional flags to control the opening of the file.
   It can contain one or several of <code class="code"><span class="constructor">Open_append</span></code>, <code class="code"><span class="constructor">Open_binary</span></code>,
   and <code class="code"><span class="constructor">Open_text</span></code>.  The default is <code class="code">[<span class="constructor">Open_text</span>]</code> (open in text mode). The
   file is created with permissions <code class="code">perms</code> (defaults to readable and
   writable only by the file owner, <code class="code">0o600</code>).</p>
</div>
<ul class="info-attributes">
<li><b>Before 4.03.0 </b> no ?perms optional argument</li>
<li><b>Before 3.11.2 </b> no ?temp_dir optional argument</li>
<li><b>Raises</b> <code>Sys_error</code> if the file could not be opened.</li>
</ul>
</div>

<pre><span id="VALget_temp_dir_name"><span class="keyword">val</span> get_temp_dir_name</span> : <code class="type">unit -> string</code></pre><div class="info ">
<div class="info-desc">
<p>The name of the temporary directory:
    Under Unix, the value of the <code class="code"><span class="constructor">TMPDIR</span></code> environment variable, or "/tmp"
    if the variable is not set.
    Under Windows, the value of the <code class="code"><span class="constructor">TEMP</span></code> environment variable, or "."
    if the variable is not set.
    The temporary directory can be changed with <a href="Filename.html#VALset_temp_dir_name"><code class="code"><span class="constructor">Filename</span>.set_temp_dir_name</code></a>.</p>
</div>
<ul class="info-attributes">
<li><b>Since</b> 4.00.0</li>
</ul>
</div>

<pre><span id="VALset_temp_dir_name"><span class="keyword">val</span> set_temp_dir_name</span> : <code class="type">string -> unit</code></pre><div class="info ">
<div class="info-desc">
<p>Change the temporary directory returned by <a href="Filename.html#VALget_temp_dir_name"><code class="code"><span class="constructor">Filename</span>.get_temp_dir_name</code></a>
    and used by <a href="Filename.html#VALtemp_file"><code class="code"><span class="constructor">Filename</span>.temp_file</code></a> and <a href="Filename.html#VALopen_temp_file"><code class="code"><span class="constructor">Filename</span>.open_temp_file</code></a>.</p>
</div>
<ul class="info-attributes">
<li><b>Since</b> 4.00.0</li>
</ul>
</div>

<pre><span id="VALtemp_dir_name"><span class="keyword">val</span> temp_dir_name</span> : <code class="type">string</code></pre><div class="info ">
<div class="info-deprecated">
<span class="warning">Deprecated.</span>You should use <a href="Filename.html#VALget_temp_dir_name"><code class="code"><span class="constructor">Filename</span>.get_temp_dir_name</code></a> instead.</div>
<div class="info-desc">
<p>The name of the initial temporary directory:
    Under Unix, the value of the <code class="code"><span class="constructor">TMPDIR</span></code> environment variable, or "/tmp"
    if the variable is not set.
    Under Windows, the value of the <code class="code"><span class="constructor">TEMP</span></code> environment variable, or "."
    if the variable is not set.</p>
</div>
<ul class="info-attributes">
<li><b>Since</b> 3.09.1</li>
</ul>
</div>

<pre><span id="VALquote"><span class="keyword">val</span> quote</span> : <code class="type">string -> string</code></pre><div class="info ">
<div class="info-desc">
<p>Return a quoted version of a file name, suitable for use as
    one argument in a command line, escaping all meta-characters.
    Warning: under Windows, the output is only suitable for use
    with programs that follow the standard Windows quoting
    conventions.</p>
</div>
</div>

<pre><span id="VALquote_command"><span class="keyword">val</span> quote_command</span> : <code class="type">string -><br>       ?stdin:string -> ?stdout:string -> ?stderr:string -> string list -> string</code></pre><div class="info ">
<div class="info-desc">
<p><code class="code">quote_command&nbsp;cmd&nbsp;args</code> returns a quoted command line, suitable
    for use as an argument to <a href="Sys.html#VALcommand"><code class="code"><span class="constructor">Sys</span>.command</code></a>, <a href="Unix.html#VALsystem"><code class="code"><span class="constructor">Unix</span>.system</code></a>, and the
    <a href="Unix.html#VALopen_process"><code class="code"><span class="constructor">Unix</span>.open_process</code></a> functions.</p>

<p>The string <code class="code">cmd</code> is the command to call.  The list <code class="code">args</code> is
    the list of arguments to pass to this command.  It can be empty.</p>

<p>The optional arguments <code class="code">?stdin</code> and <code class="code">?stdout</code> and <code class="code">?stderr</code> are
    file names used to redirect the standard input, the standard
    output, or the standard error of the command.
    If <code class="code">~stdin:f</code> is given, a redirection <code class="code">&lt;&nbsp;f</code> is performed and the
    standard input of the command reads from file <code class="code">f</code>.
    If <code class="code">~stdout:f</code> is given, a redirection <code class="code">&gt;&nbsp;f</code> is performed and the
    standard output of the command is written to file <code class="code">f</code>.
    If <code class="code">~stderr:f</code> is given, a redirection <code class="code">2&gt;&nbsp;f</code> is performed and the
    standard error of the command is written to file <code class="code">f</code>.
    If both <code class="code">~stdout:f</code> and <code class="code">~stderr:f</code> are given, with the exact
    same file name <code class="code">f</code>, a <code class="code">2&gt;&amp;1</code> redirection is performed so that the
    standard output and the standard error of the command are interleaved
    and redirected to the same file <code class="code">f</code>.</p>

<p>Under Unix and Cygwin, the command, the arguments, and the redirections
    if any are quoted using <a href="Filename.html#VALquote"><code class="code"><span class="constructor">Filename</span>.quote</code></a>, then concatenated.
    Under Win32, additional quoting is performed as required by the
    <code class="code">cmd.exe</code> shell that is called by <a href="Sys.html#VALcommand"><code class="code"><span class="constructor">Sys</span>.command</code></a>.</p>
</div>
<ul class="info-attributes">
<li><b>Raises</b> <code>Failure</code> if the command cannot be escaped on the current platform.</li>
</ul>
</div>
</body></html>