emacs.d/clones/lisp/docs.racket-lang.org/reference/Manipulating_Paths.html

237 lines
152 KiB
HTML
Raw Normal View History

2022-08-24 19:36:32 +02:00
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"/><meta name="viewport" content="width=device-width, initial-scale=0.8"/><title>15.1.1&nbsp;Manipulating Paths</title><link rel="stylesheet" type="text/css" href="../scribble.css" title="default"/><link rel="stylesheet" type="text/css" href="extras.css" title="default"/><link rel="stylesheet" type="text/css" href="../racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-style.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../doc-site.css" title="default"/><script type="text/javascript" src="../scribble-common.js"></script><script type="text/javascript" src="../manual-racket.js"></script><script type="text/javascript" src="../manual-racket.js"></script><script type="text/javascript" src="../doc-site.js"></script><script type="text/javascript" src="../local-redirect/local-redirect.js"></script><script type="text/javascript" src="../local-redirect/local-user-redirect.js"></script><!--[if IE 6]><style type="text/css">.SIEHidden { overflow: hidden; }</style><![endif]--></head><body id="doc-racket-lang-org"><div class="tocset"><div class="tocview"><div class="tocviewlist tocviewlisttopspace"><div class="tocviewtitle"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_0&quot;);">&#9658;</a></td><td></td><td><a href="index.html" class="tocviewlink" data-pltdoc="x">The Racket Reference</a></td></tr></table></div><div class="tocviewsublisttop" style="display: none;" id="tocview_0"><table cellspacing="0" cellpadding="0"><tr><td align="right">1&nbsp;</td><td><a href="model.html" class="tocviewlink" data-pltdoc="x">Language Model</a></td></tr><tr><td align="right">2&nbsp;</td><td><a href="notation.html" class="tocviewlink" data-pltdoc="x">Notation for Documentation</a></td></tr><tr><td align="right">3&nbsp;</td><td><a href="syntax.html" class="tocviewlink" data-pltdoc="x">Syntactic Forms</a></td></tr><tr><td align="right">4&nbsp;</td><td><a href="data.html" class="tocviewlink" data-pltdoc="x">Datatypes</a></td></tr><tr><td align="right">5&nbsp;</td><td><a href="structures.html" class="tocviewlink" data-pltdoc="x">Structures</a></td></tr><tr><td align="right">6&nbsp;</td><td><a href="mzlib_class.html" class="tocviewlink" data-pltdoc="x">Classes and Objects</a></td></tr><tr><td align="right">7&nbsp;</td><td><a href="mzlib_unit.html" class="tocviewlink" data-pltdoc="x">Units</a></td></tr><tr><td align="right">8&nbsp;</td><td><a href="contracts.html" class="tocviewlink" data-pltdoc="x">Contracts</a></td></tr><tr><td align="right">9&nbsp;</td><td><a href="match.html" class="tocviewlink" data-pltdoc="x">Pattern Matching</a></td></tr><tr><td align="right">10&nbsp;</td><td><a href="control.html" class="tocviewlink" data-pltdoc="x">Control Flow</a></td></tr><tr><td align="right">11&nbsp;</td><td><a href="concurrency.html" class="tocviewlink" data-pltdoc="x">Concurrency and Parallelism</a></td></tr><tr><td align="right">12&nbsp;</td><td><a href="Macros.html" class="tocviewlink" data-pltdoc="x">Macros</a></td></tr><tr><td align="right">13&nbsp;</td><td><a href="input-and-output.html" class="tocviewlink" data-pltdoc="x">Input and Output</a></td></tr><tr><td align="right">14&nbsp;</td><td><a href="security.html" class="tocviewlink" data-pltdoc="x">Reflection and Security</a></td></tr><tr><td align="right">15&nbsp;</td><td><a href="os.html" class="tocviewselflink" data-pltdoc="x">Operating System</a></td></tr><tr><td align="right">16&nbsp;</td><td><a href="memory.html" class="tocviewlink" data-pltdoc="x">Memory Management</a></td></tr><tr><td align="right">17&nbsp;</td><td><a href="unsafe.html" class="tocviewlink" data-pltdoc="x">Unsafe Operations</a></td></tr><tr><td align="right">18&nbsp;</td><td><a href="running.html" cla
platform (not a string, and not a path for a different platform),
<span class="RktVal">#f</span> otherwise.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/private/misc..rkt)._path-string~3f))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-string~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">path-string?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktVar">v</span> is either a <a name="(tech._path._or._string)"></a><span style="font-style: italic">path
or string</span>: either a path for the current platform or a
non-empty string without nul characters. Returns <span class="RktVal">#f</span>
otherwise.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._path-for-some-system~3f))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">path-for-some-system?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktVar">v</span> is a path value for some platform
(not a string), <span class="RktVal">#f</span> otherwise.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._string-~3epath))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._string-~3epath%29%29" class="RktValDef RktValLink" data-pltdoc="x">string-&gt;path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">str</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path~3f%29%29" class="RktValLink" data-pltdoc="x">path?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">str</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="strings.html#%28def._%28%28quote._~23~25kernel%29._string~3f%29%29" class="RktValLink" data-pltdoc="x">string?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Produces a path whose byte-string encoding is
<span class="RktPn">(</span><span class="RktSym"><a href="bytestrings.html#%28def._%28%28quote._~23~25kernel%29._string-~3ebytes%2Flocale%29%29" class="RktValLink" data-pltdoc="x">string-&gt;bytes/locale</a></span><span class="stt"> </span><span class="RktVar">str</span><span class="stt"> </span><span class="RktPn">(</span><span class="RktSym"><a href="characters.html#%28def._%28%28quote._~23~25kernel%29._char-~3einteger%29%29" class="RktValLink" data-pltdoc="x">char-&gt;integer</a></span><span class="stt"> </span><span class="RktVal">#\?</span><span class="RktPn">)</span><span class="RktPn">)</span> on Unix and Mac OS
or <span class="RktPn">(</span><span class="RktSym"><a href="bytestrings.html#%28def._%28%28quote._~23~25kernel%29._string-~3ebytes%2Futf-8%29%29" class="RktValLink" data-pltdoc="x">string-&gt;bytes/utf-8</a></span><span class="stt"> </span><span class="RktVar">str</span><span class="RktPn">)</span> on Windows.</div></p><p>Beware that the current locale might not encode every string, in which
case <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._string-~3epath%29%29" class="RktValLink" data-pltdoc="x">string-&gt;path</a></span> can produce the same path for different
<span class="RktVar">str</span>s. See also <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._string-~3epath-element%29%29" class="RktValLink" data-pltdoc="x">string-&gt;path-element</a></span>, which should be
used instead of <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._string-~3epath%29%29" class="RktValLink" data-pltdoc="x">string-&gt;path</a></span> when a string represents a
single <a href="More_Path_Utilities.html#%28tech._path._element%29" class="techoutside" data-pltdoc="x"><span class="techinside">path element</span></a>. For information on how strings and byte
strings encode paths, see <a href="unixpaths.html#%28part._unixpathrep%29" data-pltdoc="x">Unix Path Representation</a> and
<a href="windowspaths.html#%28part._windowspathrep%29" data-pltdoc="x">Windows Path Representation</a>.</p><p>See also <span class="RktSym"><a href="More_Path_Utilities.html#%28def._%28%28lib._racket%2Fpath..rkt%29._string-~3esome-system-path%29%29" class="RktValLink" data-pltdoc="x">string-&gt;some-system-path</a></span>, and see
<a href="unixpaths.html#%28part._unixpathrep%29" data-pltdoc="x">Unix Path Representation</a> and <a href="windowspaths.html#%28part._windowspathrep%29" data-pltdoc="x">Windows Path Representation</a> for information
on how strings encode paths.</p><p class="SHistory">Changed in version 6.1.1.1 of package <span class="stt">base</span>: Changed Windows conversion to always use UTF-8.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._bytes-~3epath))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._bytes-~3epath%29%29" class="RktValDef RktValLink" data-pltdoc="x">bytes-&gt;path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">bstr</span><span class="hspace">&nbsp;</span><span class="RktOpt">[</span><span class="RktVar">type</span><span class="RktOpt">]</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path~3f%29%29" class="RktValLink" data-pltdoc="x">path?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">bstr</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="bytestrings.html#%28def._%28%28quote._~23~25kernel%29._bytes~3f%29%29" class="RktValLink" data-pltdoc="x">bytes?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">type</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">unix</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">windows</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._system-path-convention-type%29%29" class="RktValLink" data-pltdoc="x">system-path-convention-type</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Produces a path (for some platform) whose byte-string encoding is
<span class="RktVar">bstr</span>, where <span class="RktVar">bstr</span> must not contain a nul byte. The
optional <span class="RktVar">type</span> specifies the convention to use for the path.</div></p><p>For converting relative <a href="More_Path_Utilities.html#%28tech._path._element%29" class="techoutside" data-pltdoc="x"><span class="techinside">path elements</span></a> from literals, use instead
<span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._bytes-~3epath-element%29%29" class="RktValLink" data-pltdoc="x">bytes-&gt;path-element</a></span>, which applies a suitable encoding for
individual elements.</p><p>For information on how byte strings encode paths, see
<a href="unixpaths.html#%28part._unixpathrep%29" data-pltdoc="x">Unix Path Representation</a> and <a href="windowspaths.html#%28part._windowspathrep%29" data-pltdoc="x">Windows Path Representation</a>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._path-~3estring))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-~3estring%29%29" class="RktValDef RktValLink" data-pltdoc="x">path-&gt;string</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="strings.html#%28def._%28%28quote._~23~25kernel%29._string~3f%29%29" class="RktValLink" data-pltdoc="x">string?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path~3f%29%29" class="RktValLink" data-pltdoc="x">path?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Produces a string that represents <span class="RktVar">path</span> by decoding
<span class="RktVar">path</span>&rsquo;s byte-string encoding using the current locale
on Unix and Mac OS and by using UTF-8 on Windows. In the former case,
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">?</span><span class="hspace"></span></span> is used in the result string where encoding fails, and if
the encoding result is the empty string, then the result is
<span class="RktVal">"?"</span>.</div></p><p>The resulting string is suitable for displaying to a user,
string-ordering comparisons, etc., but it is not suitable for
re-creating a path (possibly modified) via <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._string-~3epath%29%29" class="RktValLink" data-pltdoc="x">string-&gt;path</a></span>,
since decoding and re-encoding the path&rsquo;s byte string may lose
information.</p><p>Furthermore, for display and sorting based on individual <a href="More_Path_Utilities.html#%28tech._path._element%29" class="techoutside" data-pltdoc="x"><span class="techinside">path elements</span></a>
(such as pathless file names), use <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-element-~3estring%29%29" class="RktValLink" data-pltdoc="x">path-element-&gt;string</a></span>,
instead, to avoid special encodings use to represent some relative
paths. See <a href="windowspaths.html" data-pltdoc="x">Windows Paths</a> for specific information about
the conversion of Windows paths.</p><p>See also <span class="RktSym"><a href="More_Path_Utilities.html#%28def._%28%28lib._racket%2Fpath..rkt%29._some-system-path-~3estring%29%29" class="RktValLink" data-pltdoc="x">some-system-path-&gt;string</a></span>.</p><p class="SHistory">Changed in version 6.1.1.1 of package <span class="stt">base</span>: Changed Windows conversion to always use UTF-8.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._path-~3ebytes))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-~3ebytes%29%29" class="RktValDef RktValLink" data-pltdoc="x">path-&gt;bytes</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="bytestrings.html#%28def._%28%28quote._~23~25kernel%29._bytes~3f%29%29" class="RktValLink" data-pltdoc="x">bytes?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Produces <span class="RktVar">path</span>&rsquo;s byte-string representation. No information is
lost in this translation, so that <span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._bytes-~3epath%29%29" class="RktValLink" data-pltdoc="x">bytes-&gt;path</a></span><span class="stt"> </span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-~3ebytes%29%29" class="RktValLink" data-pltdoc="x">path-&gt;bytes</a></span><span class="stt"> </span><span class="RktVar">path</span><span class="RktPn">)</span><span class="stt"> </span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-convention-type%29%29" class="RktValLink" data-pltdoc="x">path-convention-type</a></span><span class="stt"> </span><span class="RktVar">path</span><span class="RktPn">)</span><span class="RktPn">)</span> always produces a path that is
<span class="RktSym"><a href="Equality.html#%28def._%28%28quote._~23~25kernel%29._equal~3f%29%29" class="RktValLink" data-pltdoc="x">equal?</a></span> to <span class="RktVar">path</span>. The <span class="RktVar">path</span> argument can be a
path for any platform.</div></p><p>Conversion to and from byte values is useful for marshaling and
unmarshaling paths, but manipulating the byte form of a path is
generally a mistake. In particular, the byte string may start with a
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL</span><span class="hspace"></span></span> encoding for Windows paths. Instead of
<span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-~3ebytes%29%29" class="RktValLink" data-pltdoc="x">path-&gt;bytes</a></span>, use <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._split-path%29%29" class="RktValLink" data-pltdoc="x">split-path</a></span> and
<span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-element-~3ebytes%29%29" class="RktValLink" data-pltdoc="x">path-element-&gt;bytes</a></span> to manipulate individual <a href="More_Path_Utilities.html#%28tech._path._element%29" class="techoutside" data-pltdoc="x"><span class="techinside">path elements</span></a>.</p><p>For information on how byte strings encode paths, see
<a href="unixpaths.html#%28part._unixpathrep%29" data-pltdoc="x">Unix Path Representation</a> and <a href="windowspaths.html#%28part._windowspathrep%29" data-pltdoc="x">Windows Path Representation</a>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._string-~3epath-element))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._string-~3epath-element%29%29" class="RktValDef RktValLink" data-pltdoc="x">string-&gt;path-element</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">str</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">false-on-non-element?</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._and%2Fc%29%29" class="RktValLink" data-pltdoc="x">and/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path~3f%29%29" class="RktValLink" data-pltdoc="x">path?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="More_Path_Utilities.html#%28def._%28%28lib._racket%2Fpath..rkt%29._path-element~3f%29%29" class="RktValLink" data-pltdoc="x">path-element?</a></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">str</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="strings.html#%28def._%28%28quote._~23~25kernel%29._string~3f%29%29" class="RktValLink" data-pltdoc="x">string?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">false-on-non-element?</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">#f</span></td></tr></table></blockquote></div><div class="SIntrapara">Like <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._string-~3epath%29%29" class="RktValLink" data-pltdoc="x">string-&gt;path</a></span>, except that <span class="RktVar">str</span> corresponds to a
single relative element in a path, and it is encoded as necessary to
convert it to a path. See <a href="unixpaths.html" data-pltdoc="x">Unix and Mac OS Paths</a> and
<a href="windowspaths.html" data-pltdoc="x">Windows Paths</a> for more information on the conversion of
paths.</div></p><p>If <span class="RktVar">str</span> does not correspond to any <a href="More_Path_Utilities.html#%28tech._path._element%29" class="techoutside" data-pltdoc="x"><span class="techinside">path element</span></a>
(e.g., it is an absolute path, or it can be split), or if it
corresponds to an up-directory or same-directory indicator on
Unix and Mac OS, then either <span class="RktVal">#f</span> is returned or <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.
A <span class="RktVal">#f</span> is returned only when <span class="RktVar">false-on-non-element?</span>
is true.</p><p>Like <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-~3estring%29%29" class="RktValLink" data-pltdoc="x">path-&gt;string</a></span>, information can be lost from
<span class="RktVar">str</span> in the locale-specific conversion to a path.</p><p class="SHistory">Changed in version 8.1.0.6 of package <span class="stt">base</span>: Added the <span class="RktVar">false-on-non-element?</span> argument.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._bytes-~3epath-element))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._bytes-~3epath-element%29%29" class="RktValDef RktValLink" data-pltdoc="x">bytes-&gt;path-element</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">bstr</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">type</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">false-on-non-element?</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="More_Path_Utilities.html#%28def._%28%28lib._racket%2Fpath..rkt%29._path-element~3f%29%29" class="RktValLink" data-pltdoc="x">path-element?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">bstr</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="bytestrings.html#%28def._%28%28quote._~23~25kernel%29._bytes~3f%29%29" class="RktValLink" data-pltdoc="x">bytes?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">type</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">unix</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">windows</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._system-path-convention-type%29%29" class="RktValLink" data-pltdoc="x">system-path-convention-type</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">false-on-non-element?</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">#f</span></td></tr></table></blockquote></div><div class="SIntrapara">Like <span class="RktSym"><
single relative element in a path. In terms of conversions,
restrictions on <span class="RktVar">bstr</span>, and the treatment of <span class="RktVar">false-on-non-element?</span>,
<span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._bytes-~3epath-element%29%29" class="RktValLink" data-pltdoc="x">bytes-&gt;path-element</a></span> is like <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._string-~3epath-element%29%29" class="RktValLink" data-pltdoc="x">string-&gt;path-element</a></span>.</div></p><p>The <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._bytes-~3epath-element%29%29" class="RktValLink" data-pltdoc="x">bytes-&gt;path-element</a></span> procedure is generally the best
choice for reconstructing a path based on another path (where the
other path is deconstructed with <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._split-path%29%29" class="RktValLink" data-pltdoc="x">split-path</a></span> and
<span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-element-~3ebytes%29%29" class="RktValLink" data-pltdoc="x">path-element-&gt;bytes</a></span>) when ASCII-level manipulation of
<a href="More_Path_Utilities.html#%28tech._path._element%29" class="techoutside" data-pltdoc="x"><span class="techinside">path elements</span></a> is necessary.</p><p class="SHistory">Changed in version 8.1.0.6 of package <span class="stt">base</span>: Added the <span class="RktVar">false-on-non-element?</span> argument.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._path-element-~3estring))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-element-~3estring%29%29" class="RktValDef RktValLink" data-pltdoc="x">path-element-&gt;string</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="strings.html#%28def._%28%28quote._~23~25kernel%29._string~3f%29%29" class="RktValLink" data-pltdoc="x">string?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="More_Path_Utilities.html#%28def._%28%28lib._racket%2Fpath..rkt%29._path-element~3f%29%29" class="RktValLink" data-pltdoc="x">path-element?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Like <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-~3estring%29%29" class="RktValLink" data-pltdoc="x">path-&gt;string</a></span>, except that trailing path separators are
removed (as by <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._split-path%29%29" class="RktValLink" data-pltdoc="x">split-path</a></span>). On Windows, any
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL</span><span class="hspace"></span></span> encoding prefix is also removed; see
<a href="windowspaths.html" data-pltdoc="x">Windows Paths</a> for more information.</div></p><p>The <span class="RktVar">path</span> argument must be such that <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._split-path%29%29" class="RktValLink" data-pltdoc="x">split-path</a></span>
applied to <span class="RktVar">path</span> would return <span class="RktVal">'</span><span class="RktVal">relative</span> as its first
result and a path as its second result, otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p>The <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-element-~3estring%29%29" class="RktValLink" data-pltdoc="x">path-element-&gt;string</a></span> procedure is generally the best
choice for presenting a pathless file or directory name to a user.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._path-element-~3ebytes))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-element-~3ebytes%29%29" class="RktValDef RktValLink" data-pltdoc="x">path-element-&gt;bytes</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="bytestrings.html#%28def._%28%28quote._~23~25kernel%29._bytes~3f%29%29" class="RktValLink" data-pltdoc="x">bytes?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="More_Path_Utilities.html#%28def._%28%28lib._racket%2Fpath..rkt%29._path-element~3f%29%29" class="RktValLink" data-pltdoc="x">path-element?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Like <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-~3ebytes%29%29" class="RktValLink" data-pltdoc="x">path-&gt;bytes</a></span>, except that any encoding prefix is removed,
etc., as for <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-element-~3estring%29%29" class="RktValLink" data-pltdoc="x">path-element-&gt;string</a></span>.</div></p><p>For any reasonable locale, consecutive ASCII characters in the printed
form of <span class="RktVar">path</span> are mapped to consecutive byte values that match
each character&rsquo;s code-point value, and a leading or trailing ASCII
character is mapped to a leading or trailing byte, respectively. The
<span class="RktVar">path</span> argument can be a path for any platform.</p><p>The <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-element-~3ebytes%29%29" class="RktValLink" data-pltdoc="x">path-element-&gt;bytes</a></span> procedure is generally the right
choice (in combination with <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._split-path%29%29" class="RktValLink" data-pltdoc="x">split-path</a></span>) for extracting the
content of a path to manipulate it at the ASCII level (then
reassembling the result with <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._bytes-~3epath-element%29%29" class="RktValLink" data-pltdoc="x">bytes-&gt;path-element</a></span> and
<span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._build-path%29%29" class="RktValLink" data-pltdoc="x">build-path</a></span>).</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._path~3c~3f))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path~3c~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">path&lt;?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">a-path</span><span class="hspace">&nbsp;</span><span class="RktVar">b-path</span><span class="hspace">&nbsp;</span><span class="RktMeta">...</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">a-path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path~3f%29%29" class="RktValLink" data-pltdoc="x">path?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">b-path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path~3f%29%29" class="RktValLink" data-pltdoc="x">path?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if the arguments are sorted, where the comparison
for each pair of paths is the same as using
<span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-~3ebytes%29%29" class="RktValLink" data-pltdoc="x">path-&gt;bytes</a></span> and <span class="RktSym"><a href="bytestrings.html#%28def._%28%28quote._~23~25kernel%29._bytes~3c~3f%29%29" class="RktValLink" data-pltdoc="x">bytes&lt;?</a></span>.</div></p><p class="SHistory">Changed in version 7.0.0.13 of package <span class="stt">base</span>: Allow one argument, in addition to allowing two or more.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._path-convention-type))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-convention-type%29%29" class="RktValDef RktValLink" data-pltdoc="x">path-convention-type</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">unix</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">windows</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Accepts a path value (not a string) and returns its convention
type.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._system-path-convention-type))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._system-path-convention-type%29%29" class="RktValDef RktValLink" data-pltdoc="x">system-path-convention-type</a></span></span><span class="RktPn"></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">unix</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">windows</span><span class="RktPn">)</span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Returns the path convention type of the current platform:
<a name="(idx._(gentag._288._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktVal">'</span><span class="RktVal">unix</span> for Unix and Mac OS, <a name="(idx._(gentag._289._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktVal">'</span><span class="RktVal">windows</span> for
Windows.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._build-path))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._build-path%29%29" class="RktValDef RktValLink" data-pltdoc="x">build-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">base</span><span class="hspace">&nbsp;</span><span class="RktVar">sub</span><span class="hspace">&nbsp;</span><span class="RktMeta">...</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">base</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-string~3f%29%29" class="RktValLink" data-pltdoc="x">path-string?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">up</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">same</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="argcontract"><tr><td valign="top"><span class="hspace">&nbsp;&nbsp;</span></td><td valign="top"><span class="RktVar">sub</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">:</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._and%2Fc%29%29" class="RktValLink" data-pltdoc="x">and/c</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-string~3f%29%29" class="RktValLink" data-pltdoc="x">path-string?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._not%2Fc%29%29" class="RktValLink" data-pltdoc="x">not/c</a></span><span class="hspace">&nbs
extensions. If <span class="RktVar">base</span> is an absolute path, the result is an
absolute path, otherwise the result is a relative path.</div></p><p>The <span class="RktVar">base</span> and each <span class="RktVar">sub</span> must be either a relative
path, the symbol <a name="(idx._(gentag._290._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktVal">'</span><span class="RktVal">up</span> (indicating the relative parent
directory), or the symbol <a name="(idx._(gentag._291._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktVal">'</span><span class="RktVal">same</span> (indicating the
relative current directory). For Windows paths, if <span class="RktVar">base</span> is a
drive specification (with or without a trailing slash) the first
<span class="RktVar">sub</span> can be an absolute (driveless) path. For all platforms,
the last <span class="RktVar">sub</span> can be a filename.</p><p>The <span class="RktVar">base</span> and <span class="RktVar">sub</span> arguments can be paths for
any platform. The platform for the resulting path is inferred from the
<span class="RktVar">base</span> and <span class="RktVar">sub</span> arguments, where string arguments imply
a path for the current platform. If different arguments are for
different platforms, the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised. If no argument
implies a platform (i.e., all are <span class="RktVal">'</span><span class="RktVal">up</span> or <span class="RktVal">'</span><span class="RktVal">same</span>), the
generated path is for the current platform.</p><p>Each <span class="RktVar">sub</span> and <span class="RktVar">base</span> can optionally end in a directory
separator. If the last <span class="RktVar">sub</span> ends in a separator, it is
included in the resulting path.</p><p>If <span class="RktVar">base</span> or <span class="RktVar">sub</span> is an illegal path string (because it
is empty or contains a nul character), the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p>The <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._build-path%29%29" class="RktValLink" data-pltdoc="x">build-path</a></span> procedure builds a path <span style="font-style: italic">without</span>
checking the validity of the path or accessing the filesystem.</p><p>See <a href="unixpaths.html" data-pltdoc="x">Unix and Mac OS Paths</a> and <a href="windowspaths.html" data-pltdoc="x">Windows Paths</a> for more
information on the construction of paths.</p><p>The following examples assume that the current directory is
<span class="stt">"/home/joeuser"</span> for Unix examples and <span class="stt">"C:\Joe&rsquo;s Files"</span> for
Windows examples.</p><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define%29%29" class="RktStxLink" data-pltdoc="x">define</a></span><span class="hspace">&nbsp;</span><span class="RktSym">p1</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._build-path%29%29" class="RktValLink" data-pltdoc="x">build-path</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="Filesystem.html#%28def._%28%28quote._~23~25kernel%29._current-directory%29%29" class="RktValLink" data-pltdoc="x">current-directory</a></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktVal">"src"</span><span class="hspace">&nbsp;</span><span class="RktVal">"racket"</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;</span><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Unix: </span><span class="RktSym">p1</span><span class="RktCmt"> is </span><span class="RktVal">"/home/joeuser/src/racket"</span></td></tr><tr><td><span class="hspace">&nbsp;</span><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Windows: </span><span class="RktSym">p1</span><span class="RktCmt"> is </span><span class="RktVal">"C:\\Joe's Files\\src\\racket"</span></td></tr><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define%29%29" class="RktStxLink" data-pltdoc="x">define</a></span><span class="hspace">&nbsp;</span><span class="RktSym">p2</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._build-path%29%29" class="RktValLink" data-pltdoc="x">build-path</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">up</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">up</span><span class="hspace">&nbsp;</span><span class="RktVal">"docs"</span><span class="hspace">&nbsp;</span><span class="RktVal">"Racket"</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;</span><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Unix: </span><span class="RktSym">p2</span><span class="RktCmt"> is </span><span class="RktVal">"../../docs/Racket"</span></td></tr><tr><td><span class="hspace">&nbsp;</span><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Windows: </span><span class="RktSym">p2</span><span class="RktCmt"> is </span><span class="RktVal">"..\\..\\docs\\Racket"</span></td></tr><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._build-path%29%29" class="RktValLink" data-pltdoc="x">build-path</a></span><span class="hspace">&nbsp;</span><span class="RktSym">p2</span><span class="hspace">&nbsp;</span><span class="RktSym">p1</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;</span><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Unix and Windows: raises </span><span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span><span class="RktCmt">; </span><span class="RktSym">p1</span><span class="RktCmt"> is absolute</span></td></tr><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._build-path%29%29" class="RktValLink" data-pltdoc="x">build-path</a></span><span class="hspace">&nbsp;</span><span class="RktSym">p1</span><span class=
explicitly.</div></p><p>Note that, just as with <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._build-path%29%29" class="RktValLink" data-pltdoc="x">build-path</a></span>, any string arguments for either
<span class="RktVar">base</span> or <span class="RktVar">sub</span> will be implicitly converted into a path for the
current platform before being combined with the others. For this reason, you
cannot use this function to build paths from strings for any platform other
than the current one; in such attempts, <span class="RktVar">type</span> does not match the
inferred convention type for the strings and an <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.
(To create paths for foreign platforms, see <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._bytes-~3epath%29%29" class="RktValLink" data-pltdoc="x">bytes-&gt;path</a></span>.)</p><p>The usefulness of <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._build-path%2Fconvention-type%29%29" class="RktValLink" data-pltdoc="x">build-path/convention-type</a></span> over <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._build-path%29%29" class="RktValLink" data-pltdoc="x">build-path</a></span>
is limited to cases where the sub-paths contain <span class="RktVal">'</span><span class="RktVal">same</span> or <span class="RktVal">'</span><span class="RktVal">up</span>
elements.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._absolute-path~3f))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._absolute-path~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">absolute-path?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path~3f%29%29" class="RktValLink" data-pltdoc="x">path?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="strings.html#%28def._%28%28quote._~23~25kernel%29._string~3f%29%29" class="RktValLink" data-pltdoc="x">string?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktVar">path</span> is an absolute path, <span class="RktVal">#f</span>
otherwise. The <span class="RktVar">path</span> argument can be a path for any
platform. If <span class="RktVar">path</span> is not a legal path string (e.g., it
contains a nul character), <span class="RktVal">#f</span> is returned. This procedure
does not access the filesystem.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._relative-path~3f))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._relative-path~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">relative-path?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path~3f%29%29" class="RktValLink" data-pltdoc="x">path?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="strings.html#%28def._%28%28quote._~23~25kernel%29._string~3f%29%29" class="RktValLink" data-pltdoc="x">string?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktVar">path</span> is a relative path, <span class="RktVal">#f</span>
otherwise. The <span class="RktVar">path</span> argument can be a path for any
platform. If <span class="RktVar">path</span> is not a legal path string (e.g., it
contains a nul character), <span class="RktVal">#f</span> is returned. This procedure
does not access the filesystem.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._complete-path~3f))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._complete-path~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">complete-path?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path~3f%29%29" class="RktValLink" data-pltdoc="x">path?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="strings.html#%28def._%28%28quote._~23~25kernel%29._string~3f%29%29" class="RktValLink" data-pltdoc="x">string?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktVar">path</span> is a <a name="(tech._complete)"></a><span style="font-style: italic">complete</span>ly determined path
(<span style="font-style: italic">not</span> relative to a directory or drive), <span class="RktVal">#f</span>
otherwise. The <span class="RktVar">path</span> argument can be a path for any
platform. Note that for Windows paths, an absolute path can omit the
drive specification, in which case the path is neither relative nor
complete. If <span class="RktVar">path</span> is not a legal path string (e.g., it
contains a nul character), <span class="RktVal">#f</span> is returned.</div></p><p>This procedure does not access the filesystem.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._path-~3ecomplete-path))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-~3ecomplete-path%29%29" class="RktValDef RktValLink" data-pltdoc="x">path-&gt;complete-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span><span class="RktOpt">[</span><span class="RktVar">base</span><span class="RktOpt">]</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-string~3f%29%29" class="RktValLink" data-pltdoc="x">path-string?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="argcontract"><tr><td valign="top"><span class="hspace">&nbsp;&nbsp;</span></td><td valign="top"><span class="RktVar">base</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">:</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-string~3f%29%29" class="RktValLink" data-pltdoc="x">path-string?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="RktPn">)</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">=</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktPn">(</span><span class="RktSym"><a href="Filesystem.html#%28def._%28%28quote._~23~25kernel%29._current-directory%29%29" class="RktValLink" data-pltdoc="x">current-directory</a></span><span class="RktPn">)</span></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVar">path</span> as a complete path. If <span class="RktVar">path</span> is already
a complete path, it is returned as the result. Otherwise,
<span class="RktVar">path</span> is resolved with respect to the complete path
<span class="RktVar">base</span>. If <span class="RktVar">base</span> is not a complete path, the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</div></p><p>The <span class="RktVar">path</span> and <span class="RktVar">base</span> arguments can be paths for any
platform; if they are for different
platforms, the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p>This procedure does not access the filesystem.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._path-~3edirectory-path))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-~3edirectory-path%29%29" class="RktValDef RktValLink" data-pltdoc="x">path-&gt;directory-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-string~3f%29%29" class="RktValLink" data-pltdoc="x">path-string?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVar">path</span> if <span class="RktVar">path</span> syntactically refers to a
directory and ends in a separator, otherwise it returns an extended
version of <span class="RktVar">path</span> that specifies a directory and ends with a
separator. For example, on Unix and Mac OS, the path <span class="stt">"x/y/"</span>
syntactically refers to a directory and ends in a separator, but
<span class="stt">"x/y"</span> would be extended to <span class="stt">"x/y/"</span>, and <span class="stt">"x/.."</span> would be
extended to <span class="stt">"x/../"</span>. The <span class="RktVar">path</span> argument can be a path for
any platform, and the result will be for the same platform.</div></p><p>This procedure does not access the filesystem.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._resolve-path))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._resolve-path%29%29" class="RktValDef RktValLink" data-pltdoc="x">resolve-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path~3f%29%29" class="RktValLink" data-pltdoc="x">path?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-string~3f%29%29" class="RktValLink" data-pltdoc="x">path-string?</a></span></td></tr></table></blockquote></div><div class="SIntrapara"><a href="pathutils.html#%28tech._cleanse%29" class="techoutside" data-pltdoc="x"><span class="techinside">Cleanse</span></a>s <span class="RktVar">path</span> and returns a path that references the
same file or directory as <span class="RktVar">path</span>. If
<span class="RktVar">path</span> is a soft link to another path, then the referenced path
is returned (this may be a relative path with respect to the directory
owning <span class="RktVar">path</span>), otherwise <span class="RktVar">path</span> is returned (after
cleansing).</div></p><p>On Windows, the path for a link should be simplified syntactically, so
that an up-directory indicator removes a preceding path element
independent of whether the preceding element itself refers to a
link. For relative-paths links, the path should be parsed specially;
see <a href="windowspaths.html" data-pltdoc="x">Windows Paths</a> for more information.</p><p class="SHistory">Changed in version 6.0.1.12 of package <span class="stt">base</span>: Added support for links on Windows.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._cleanse-path))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._cleanse-path%29%29" class="RktValDef RktValLink" data-pltdoc="x">cleanse-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-string~3f%29%29" class="RktValLink" data-pltdoc="x">path-string?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara"><a href="pathutils.html#%28tech._cleanse%29" data-pltdoc="x">Cleanse</a>s <span class="RktVar">path</span> (as described at the beginning of
this chapter) without consulting the filesystem.</div></p><p><div class="SIntrapara">Example:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="let.html#%28form._%28%28lib._racket%2Fprivate%2Fletstx-scheme..rkt%29._let%29%29" class="RktStxLink" data-pltdoc="x">let</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktPn">[</span><span class="RktSym">p</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="More_Path_Utilities.html#%28def._%28%28lib._racket%2Fpath..rkt%29._string-~3esome-system-path%29%29" class="RktValLink" data-pltdoc="x">string-&gt;some-system-path</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"tiny//dancer"</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">unix</span><span class="RktPn">)</span><span class="RktPn">]</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._cleanse-path%29%29" class="RktValLink" data-pltdoc="x">cleanse-path</a></span><span class="hspace">&nbsp;</span><span class="RktSym">p</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><p><span class="RktRes">#&lt;path:tiny/dancer&gt;</span></p></td></tr></table></blockquote></div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._expand-user-path))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._expand-user-path%29%29" class="RktValDef RktValLink" data-pltdoc="x">expand-user-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path~3f%29%29" class="RktValLink" data-pltdoc="x">path?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-string~3f%29%29" class="RktValLink" data-pltdoc="x">path-string?</a></span></td></tr></table></blockquote></div><div class="SIntrapara"><a href="pathutils.html#%28tech._cleanse%29" data-pltdoc="x">Cleanse</a>s <span class="RktVar">path</span>. In addition, on Unix and Mac OS, a
leading <span class="RktInBG"><span class="hspace"></span><span class="RktIn">~</span><span class="hspace"></span></span> is treated as user&rsquo;s home directory and expanded;
the username follows the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">~</span><span class="hspace"></span></span> (before a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span> or the end
of the path), where <span class="RktInBG"><span class="hspace"></span><span class="RktIn">~</span><span class="hspace"></span></span> by itself indicates the home directory
of the current user.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._simplify-path))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._simplify-path%29%29" class="RktValDef RktValLink" data-pltdoc="x">simplify-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span><span class="RktOpt">[</span><span class="RktVar">use-filesystem?</span><span class="RktOpt">]</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-string~3f%29%29" class="RktValLink" data-pltdoc="x">path-string?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">use-filesystem?</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">#t</span></td></tr></table></blockquote></div><div class="SIntrapara">Eliminates redundant path separators (except for a single trailing
separator), up-directory <span class="RktInBG"><span class="hspace"></span><span class="RktIn">..</span><span class="hspace"></span></span>, and same-directory <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span>
indicators in <span class="RktVar">path</span>, and changes <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span> separators to
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> separators in Windows paths, such that the result
accesses the same file or directory (if it exists) as <span class="RktVar">path</span>.</div></p><p>In general, the pathname is normalized as much as possible&#8212;<wbr></wbr>without
consulting the filesystem if <span class="RktVar">use-filesystem?</span> is <span class="RktVal">#f</span>,
and (on Windows) without changing the case of letters within the
path. If <span class="RktVar">path</span> syntactically refers to a directory, the
result ends with a directory separator.</p><p>When <span class="RktVar">path</span> is simplified other than just converting slashes
to backslashes and <span class="RktVar">use-filesystem?</span> is true
(the default), a complete path is returned. If <span class="RktVar">path</span> is
relative, it is resolved with respect to the current directory.
On Unix and Mac OS, up-directory indicators are removed taking into account soft links (so
that the resulting path refers to the same directory as before);
on Windows, up-directory indicators are removed by deleting a
preceding <a href="More_Path_Utilities.html#%28tech._path._element%29" class="techoutside" data-pltdoc="x"><span class="techinside">path element</span></a>.</p><p>When <span class="RktVar">use-filesystem?</span> is <span class="RktVal">#f</span>, up-directory indicators
are removed by deleting a preceding <a href="More_Path_Utilities.html#%28tech._path._element%29" class="techoutside" data-pltdoc="x"><span class="techinside">path element</span></a>, and the result can
be a relative path with up-directory indicators remaining at the
beginning of the path; up-directory indicators are dropped when they
refer to the parent of a root directory. Similarly, the result can be
the same as <span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._build-path%29%29" class="RktValLink" data-pltdoc="x">build-path</a></span><span class="stt"> </span><span class="RktVal">'</span><span class="RktVal">same</span><span class="RktPn">)</span> (but with a trailing
separator) if eliminating up-directory indicators leaves only
same-directory indicators.</p><p>The <span class="RktVar">path</span> argument can be a path for any platform when
<span class="RktVar">use-filesystem?</span> is <span class="RktVal">#f</span>, and the resulting path is for
the same platform.</p><p>The filesystem might be accessed when <span class="RktVar">use-filesystem?</span> is
true, but the source or simplified path might be a non-existent path. If
<span class="RktVar">path</span> cannot be simplified due to a cycle of links, the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3afilesystem%29%29" class="RktValLink" data-pltdoc="x">exn:fail:filesystem</a></span> exception is raised (but a successfully simplified path may
still involve a cycle of links if the cycle did not inhibit the
simplification).</p><p>See <a href="unixpaths.html" data-pltdoc="x">Unix and Mac OS Paths</a> and <a href="windowspaths.html" data-pltdoc="x">Windows Paths</a> for more
information on simplifying paths.</p><p><div class="SIntrapara">Example:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="let.html#%28form._%28%28lib._racket%2Fprivate%2Fletstx-scheme..rkt%29._let%29%29" class="RktStxLink" data-pltdoc="x">let</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktPn">[</span><span class="RktSym">p</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="More_Path_Utilities.html#%28def._%28%28lib._racket%2Fpath..rkt%29._string-~3esome-system-path%29%29" class="RktValLink" data-pltdoc="x">string-&gt;some-system-path</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"tiny//in/my/head/../../../dancer"</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">unix</span><span class="RktPn">)</span><span class="RktPn">]</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._simplify-path%29%29" class="RktValLink" data-pltdoc="x">simplify-path</a></span><span class="hspace">&nbsp;</span><span class="RktSym">p</span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><p><span class="RktRes">#&lt;path:tiny/dancer&gt;</span></p></td></tr></table></blockquote></div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/private/misc..rkt)._normal-case-path))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._normal-case-path%29%29" class="RktValDef RktValLink" data-pltdoc="x">normal-case-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-string~3f%29%29" class="RktValLink" data-pltdoc="x">path-string?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVar">path</span> with &ldquo;normalized&rdquo; case characters. For Unix and Mac OS
paths, this procedure always returns the input path, because
filesystems for these platforms can be case-sensitive. For Windows
paths, if <span class="RktVar">path</span> does not start with <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span>, the
resulting string uses only lowercase letters, based on the current
locale. In addition, for Windows paths when the path does not start
with <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span>, all <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span>s are converted to
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s, and trailing spaces and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span>s are removed.</div></p><p>The <span class="RktVar">path</span> argument can be a path for any platform, but beware
that local-sensitive decoding and conversion of the path may be
different on the current platform than for the path&rsquo;s platform.</p><p>This procedure does not access the filesystem.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._split-path))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._split-path%29%29" class="RktValDef RktValLink" data-pltdoc="x">split-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><table cellspacing="0" cellpadding="0"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">relative</span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="RktPn">)</span></td></tr><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">up</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">same</span><span class="RktPn">)</span></td></tr><tr><td><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></td></tr></table></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-string~3f%29%29" class="RktValLink" data-pltdoc="x">path-string?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Deconstructs <span class="RktVar">path</span> into a smaller path and an immediate
directory or file name. Three values are returned:</div></p><ul><li><p><span class="RktSym">base</span> is either</p><ul><li><p>a path,</p></li><li><p><a name="(idx._(gentag._292._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktVal">'</span><span class="RktVal">relative</span> if <span class="RktVar">path</span> is an immediate
relative directory or filename, or</p></li><li><p><span class="RktVal">#f</span> if <span class="RktVar">path</span> is a root directory.</p></li></ul></li><li><p><div class="SIntrapara"><span class="RktSym">name</span> is either
</div><div class="SIntrapara"><ul><li><p>a directory-name path,</p></li><li><p>a filename,</p></li><li><p><span class="RktVal">'</span><span class="RktVal">up</span> if the last part of <span class="RktVar">path</span> specifies the parent
directory of the preceding path (e.g., <span class="RktInBG"><span class="hspace"></span><span class="RktIn">..</span><span class="hspace"></span></span> on Unix), or</p></li><li><p><span class="RktVal">'</span><span class="RktVal">same</span> if the last part of <span class="RktVar">path</span> specifies the
same directory as the preceding path (e.g., <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span> on Unix).</p></li></ul></div></p></li><li><p><span class="RktSym">must-be-dir?</span> is <span class="RktVal">#t</span> if <span class="RktVar">path</span> explicitly
specifies a directory (e.g., with a trailing separator), <span class="RktVal">#f</span>
otherwise. Note that <span class="RktSym">must-be-dir?</span> does not specify whether
<span class="RktSym">name</span> is actually a directory or not, but whether <span class="RktVar">path</span>
syntactically specifies a directory.</p></li></ul><p>Compared to <span class="RktVar">path</span>, redundant separators (if any) are removed
in the result <span class="RktSym">base</span> and <span class="RktSym">name</span>. If <span class="RktSym">base</span> is
<span class="RktVal">#f</span>, then <span class="RktSym">name</span> cannot be <span class="RktVal">'</span><span class="RktVal">up</span> or
<span class="RktVal">'</span><span class="RktVal">same</span>. The <span class="RktVar">path</span> argument can be a path for any
platform, and resulting paths for the same platform.</p><p>This procedure does not access the filesystem.</p><p>See <a href="unixpaths.html" data-pltdoc="x">Unix and Mac OS Paths</a> and <a href="windowspaths.html" data-pltdoc="x">Windows Paths</a> for more
information on splitting paths.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._explode-path))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._explode-path%29%29" class="RktValDef RktValLink" data-pltdoc="x">explode-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">up</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">same</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-string~3f%29%29" class="RktValLink" data-pltdoc="x">path-string?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Returns the list of <a href="More_Path_Utilities.html#%28tech._path._element%29" class="techoutside" data-pltdoc="x"><span class="techinside">path elements</span></a> that constitute <span class="RktVar">path</span>. If
<span class="RktVar">path</span> is simplified in the sense of <span class="RktSym"><a href="More_Path_Utilities.html#%28def._%28%28lib._racket%2Fpath..rkt%29._simple-form-path%29%29" class="RktValLink" data-pltdoc="x">simple-form-path</a></span>,
then the result is always a list of paths, and the first element of
the list is a root.</div></p><p>The <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._explode-path%29%29" class="RktValLink" data-pltdoc="x">explode-path</a></span> function computes its result in time
proportional to the length of <span class="RktVar">path</span> (unlike a loop in that
uses <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._split-path%29%29" class="RktValLink" data-pltdoc="x">split-path</a></span>, which must allocate intermediate paths).</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/private/misc..rkt)._path-replace-extension))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-replace-extension%29%29" class="RktValDef RktValLink" data-pltdoc="x">path-replace-extension</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span><span class="RktVar">ext</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-string~3f%29%29" class="RktValLink" data-pltdoc="x">path-string?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">ext</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="strings.html#%28def._%28%28quote._~23~25kernel%29._string~3f%29%29" class="RktValLink" data-pltdoc="x">string?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="bytestrings.html#%28def._%28%28quote._~23~25kernel%29._bytes~3f%29%29" class="RktValLink" data-pltdoc="x">bytes?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Returns a path that is the same as <span class="RktVar">path</span>, except that the
extension for the last element of the path (including the extension
separator) is changed to <span class="RktVar">ext</span>. If the last element of
<span class="RktVar">path</span> has no extension, then <span class="RktVar">ext</span> is added to the
path.</div></p><p>An extension is defined as a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span> that is not at the start of
the path element followed by any number of non-<span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span>
characters/bytes at the end of the <a href="More_Path_Utilities.html#%28tech._path._element%29" class="techoutside" data-pltdoc="x"><span class="techinside">path element</span></a>, as long as the
path element is not a directory indicator like <span class="RktVal">".."</span>.</p><p>The <span class="RktVar">path</span> argument can be a path for any platform, and the
result is for the same platform. If <span class="RktVar">path</span> represents a root,
the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised. The given <span class="RktVar">ext</span> typically
starts with <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span>, but it is not required to start with an
extension separator.</p><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-replace-extension%29%29" class="RktValLink" data-pltdoc="x">path-replace-extension</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"x/y.ss"</span><span class="hspace">&nbsp;</span><span class="RktVal">#".rkt"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;path:x/y.rkt&gt;</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-replace-extension%29%29" class="RktValLink" data-pltdoc="x">path-replace-extension</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"x/y.ss"</span><span class="hspace">&nbsp;</span><span class="RktVal">#""</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;path:x/y&gt;</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-replace-extension%29%29" class="RktValLink" data-pltdoc="x">path-replace-extension</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"x/y"</span><span class="hspace">&nbsp;</span><span class="RktVal">#".rkt"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;path:x/y.rkt&gt;</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-replace-extension%29%29" class="RktValLink" data-pltdoc="x">path-replace-extension</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"x/y.tar.gz"</span><span class="hspace">&nbsp;</span><span class="RktVal">#".rkt"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;path:x/y.tar.rkt&gt;</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-replace-extension%29%29" class="RktValLink" data-pltdoc="x">path-replace-extension</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"x/.racketrc"</span><span class="hspace">&nbsp;</span><span class="RktVal">#".rkt"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;path:x/.racketrc.rkt&gt;</span></p></td></tr></table></blockquote></div></p><p class="SHistory">Added in version 6.5.0.3 of package <span class="stt">base</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/private/misc..rkt)._path-add-extension))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-add-extension%29%29" class="RktValDef RktValLink" data-pltdoc="x">path-add-extension</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span><span class="RktVar">ext</span><span class="hspace">&nbsp;</span><span class="RktOpt">[</span><span class="RktVar">sep</span><span class="RktOpt">]</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-
<span class="RktVar">path</span> is preserved by replacing the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span> before the extension
with <span class="RktVar">sep</span>, and then the <span class="RktVar">ext</span> is added
to the end.</div></p><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-add-extension%29%29" class="RktValLink" data-pltdoc="x">path-add-extension</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"x/y.ss"</span><span class="hspace">&nbsp;</span><span class="RktVal">#".rkt"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;path:x/y_ss.rkt&gt;</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-add-extension%29%29" class="RktValLink" data-pltdoc="x">path-add-extension</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"x/y"</span><span class="hspace">&nbsp;</span><span class="RktVal">#".rkt"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;path:x/y.rkt&gt;</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-add-extension%29%29" class="RktValLink" data-pltdoc="x">path-add-extension</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"x/y.tar.gz"</span><span class="hspace">&nbsp;</span><span class="RktVal">#".rkt"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;path:x/y.tar_gz.rkt&gt;</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-add-extension%29%29" class="RktValLink" data-pltdoc="x">path-add-extension</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"x/y.tar.gz"</span><span class="hspace">&nbsp;</span><span class="RktVal">#".rkt"</span><span class="hspace">&nbsp;</span><span class="RktVal">#"."</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;path:x/y.tar.gz.rkt&gt;</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-add-extension%29%29" class="RktValLink" data-pltdoc="x">path-add-extension</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"x/.racketrc"</span><span class="hspace">&nbsp;</span><span class="RktVal">#".rkt"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;path:x/.racketrc.rkt&gt;</span></p></td></tr></table></blockquote></div></p><p class="SHistory">Added in version 6.5.0.3 of package <span class="stt">base</span>.<br/>Changed in version 6.8.0.2: Added the <span class="RktVar">sep</span> optional argument.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/private/misc..rkt)._path-replace-suffix))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-replace-suffix%29%29" class="RktValDef RktValLink" data-pltdoc="x">path-replace-suffix</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span><span class="RktVar">ext</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data
in a path element as an extension separator.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/private/misc..rkt)._path-add-suffix))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-add-suffix%29%29" class="RktValDef RktValLink" data-pltdoc="x">path-add-suffix</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span><span class="RktVar">ext</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-string~3f%29%29" class="RktValLink" data-pltdoc="x">path-string?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">ext</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="strings.html#%28def._%28%28quote._~23~25kernel%29._string~3f%29%29" class="RktValLink" data-pltdoc="x">string?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="bytestrings.html#%28def._%28%28quote._~23~25kernel%29._bytes~3f%29%29" class="RktValLink" data-pltdoc="x">bytes?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara"><blockquote><p><span style="background-color: yellow"><span style="font-weight: bold">NOTE:</span></span> This function is deprecated; use <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-add-extension%29%29" class="RktValLink" data-pltdoc="x">path-add-extension</a></span>, instead. </p></blockquote></div></p><p>Like <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-add-extension%29%29" class="RktValLink" data-pltdoc="x">path-add-extension</a></span>, but treats a leading <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span>
in a path element as an extension separator.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/private/misc..rkt)._reroot-path))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._reroot-path%29%29" class="RktValDef RktValLink" data-pltdoc="x">reroot-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span><span class="RktVar">root-path</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-string~3f%29%29" class="RktValLink" data-pltdoc="x">path-string?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">root-path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-string~3f%29%29" class="RktValLink" data-pltdoc="x">path-string?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="RktValLink" data-pltdoc="x">path-for-some-system?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Produces a path that extends <span class="RktVar">root-path</span> based on the complete
form of <span class="RktVar">path</span>.</div></p><p>If <span class="RktVar">path</span> is not already <a href="Manipulating_Paths.html#%28tech._complete%29" class="techoutside" data-pltdoc="x"><span class="techinside">complete</span></a>, is it completed via
<span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-~3ecomplete-path%29%29" class="RktValLink" data-pltdoc="x">path-&gt;complete-path</a></span>, in which case <span class="RktVar">path</span> must be a
path for the current platform. The <span class="RktVar">path</span> argument is also
<a href="pathutils.html#%28tech._cleanse%29" class="techoutside" data-pltdoc="x"><span class="techinside">cleanse</span></a>d and case-normalized via <span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._normal-case-path%29%29" class="RktValLink" data-pltdoc="x">normal-case-path</a></span>. The
path is then appended to <span class="RktVar">root-path</span>; in the case of Windows
paths, a root letter drive becomes a letter path element, while a root
UNC path is prefixed with <span class="RktVal">"UNC"</span> as a path element and the
machine and volume names become path elements.</p><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._reroot-path%29%29" class="RktValLink" data-pltdoc="x">reroot-path</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._bytes-~3epath%29%29" class="RktValLink" data-pltdoc="x">bytes-&gt;path</a></span><span class="hspace">&nbsp;</span><span class="RktVal">#"/home/caprica/baltar"</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">unix</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._bytes-~3epath%29%29" class="RktValLink" data-pltdoc="x">bytes-&gt;path</a></span><span class="hspace">&nbsp;</span><span class="RktVal">#"/earth"</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">unix</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><p><span class="RktRes">#&lt;path:/earth/home/caprica/baltar&gt;</span></p></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._reroot-path%29%29" class="RktValLink" data-pltdoc="x">reroot-path</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._bytes-~3epath%29%29" class="RktValLink" data-pltdoc="x">bytes-&gt;path</a></span><span class="hspace">&nbsp;</span><span class="RktVal">#"c:\\usr\\adama"</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">windows</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._bytes-~3epath%29%29" class="RktValLink" data-pltdoc="x">bytes-&gt;path</a></span><span class="hspace">&nbsp;</span><span class="RktVal">#"\\\\earth\\africa\\"</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">windows</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><p><span class="RktRes">#&lt;windows-path:\\earth\africa\c\usr\adama&gt;</span></p></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._reroot-path%29%29" class="RktValLink" data-pltdoc="x">reroot-path</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._bytes-~3epath%29%29" class="RktValLink" data-pltdoc="x">bytes-&gt;path</a></span><span class="hspace">&nbsp;</span><span class="RktVal">#"\\\\galactica\\cac\\adama"</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">windows</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span