237 lines
No EOL
152 KiB
HTML
237 lines
No EOL
152 KiB
HTML
<!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 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,"tocview_0");">►</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 </td><td><a href="model.html" class="tocviewlink" data-pltdoc="x">Language Model</a></td></tr><tr><td align="right">2 </td><td><a href="notation.html" class="tocviewlink" data-pltdoc="x">Notation for Documentation</a></td></tr><tr><td align="right">3 </td><td><a href="syntax.html" class="tocviewlink" data-pltdoc="x">Syntactic Forms</a></td></tr><tr><td align="right">4 </td><td><a href="data.html" class="tocviewlink" data-pltdoc="x">Datatypes</a></td></tr><tr><td align="right">5 </td><td><a href="structures.html" class="tocviewlink" data-pltdoc="x">Structures</a></td></tr><tr><td align="right">6 </td><td><a href="mzlib_class.html" class="tocviewlink" data-pltdoc="x">Classes and Objects</a></td></tr><tr><td align="right">7 </td><td><a href="mzlib_unit.html" class="tocviewlink" data-pltdoc="x">Units</a></td></tr><tr><td align="right">8 </td><td><a href="contracts.html" class="tocviewlink" data-pltdoc="x">Contracts</a></td></tr><tr><td align="right">9 </td><td><a href="match.html" class="tocviewlink" data-pltdoc="x">Pattern Matching</a></td></tr><tr><td align="right">10 </td><td><a href="control.html" class="tocviewlink" data-pltdoc="x">Control Flow</a></td></tr><tr><td align="right">11 </td><td><a href="concurrency.html" class="tocviewlink" data-pltdoc="x">Concurrency and Parallelism</a></td></tr><tr><td align="right">12 </td><td><a href="Macros.html" class="tocviewlink" data-pltdoc="x">Macros</a></td></tr><tr><td align="right">13 </td><td><a href="input-and-output.html" class="tocviewlink" data-pltdoc="x">Input and Output</a></td></tr><tr><td align="right">14 </td><td><a href="security.html" class="tocviewlink" data-pltdoc="x">Reflection and Security</a></td></tr><tr><td align="right">15 </td><td><a href="os.html" class="tocviewselflink" data-pltdoc="x">Operating System</a></td></tr><tr><td align="right">16 </td><td><a href="memory.html" class="tocviewlink" data-pltdoc="x">Memory Management</a></td></tr><tr><td align="right">17 </td><td><a href="unsafe.html" class="tocviewlink" data-pltdoc="x">Unsafe Operations</a></td></tr><tr><td align="right">18 </td><td><a href="running.html" class="tocviewlink" data-pltdoc="x">Running Racket</a></td></tr><tr><td align="right"></td><td><a href="doc-bibliography.html" class="tocviewlink" data-pltdoc="x">Bibliography</a></td></tr><tr><td align="right"></td><td><a href="doc-index.html" class="tocviewlink" data-pltdoc="x">Index</a></td></tr></table></div></div><div class="tocviewlist"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,"tocview_1");">►</a></td><td>15 </td><td><a href="os.html" class="tocviewlink" data-pltdoc="x">Operating System</a></td></tr></table><div class="tocviewsublist" style="display: none;" id="tocview_1"><table cellspacing="0" cellpadding="0"><tr><td align="right">15.1 </td><td><a href="pathutils.html" class="tocviewselflink" data-pltdoc="x">Paths</a></td></tr><tr><td align="right">15.2 </td><td><a href="Filesystem.html" class="tocviewlink" data-pltdoc="x">Filesystem</a></td></tr><tr><td align="right">15.3 </td><td><a href="networking.html" class="tocviewlink" data-pltdoc="x">Networking</a></td></tr><tr><td align="right">15.4 </td><td><a href="subprocess.html" class="tocviewlink" data-pltdoc="x">Processes</a></td></tr><tr><td align="right">15.5 </td><td><a href="logging.html" class="tocviewlink" data-pltdoc="x">Logging</a></td></tr><tr><td align="right">15.6 </td><td><a href="time.html" class="tocviewlink" data-pltdoc="x">Time</a></td></tr><tr><td align="right">15.7 </td><td><a href="envvars.html" class="tocviewlink" data-pltdoc="x">Environment Variables</a></td></tr><tr><td align="right">15.8 </td><td><a href="runtime.html" class="tocviewlink" data-pltdoc="x">Environment and Runtime Information</a></td></tr><tr><td align="right">15.9 </td><td><a href="Command-Line_Parsing.html" class="tocviewlink" data-pltdoc="x">Command-<wbr></wbr>Line Parsing</a></td></tr><tr><td align="right">15.10 </td><td><a href="os-lib.html" class="tocviewlink" data-pltdoc="x">Additional Operating System Functions</a></td></tr></table></div></div><div class="tocviewlist"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,"tocview_2");">▼</a></td><td>15.1 </td><td><a href="pathutils.html" class="tocviewlink" data-pltdoc="x">Paths</a></td></tr></table><div class="tocviewsublistbottom" style="display: block;" id="tocview_2"><table cellspacing="0" cellpadding="0"><tr><td align="right">15.1.1 </td><td><a href="Manipulating_Paths.html" class="tocviewselflink" data-pltdoc="x">Manipulating Paths</a></td></tr><tr><td align="right">15.1.2 </td><td><a href="More_Path_Utilities.html" class="tocviewlink" data-pltdoc="x">More Path Utilities</a></td></tr><tr><td align="right">15.1.3 </td><td><a href="unixpaths.html" class="tocviewlink" data-pltdoc="x">Unix and Mac OS Paths</a></td></tr><tr><td align="right">15.1.4 </td><td><a href="windowspaths.html" class="tocviewlink" data-pltdoc="x">Windows Paths</a></td></tr></table></div></div></div><div class="tocsub"><div class="tocsubtitle">On this page:</div><table class="tocsublist" cellspacing="0"><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path~3f%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">path?</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-string~3f%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">path-<wbr></wbr>string?</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-for-some-system~3f%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">path-<wbr></wbr>for-<wbr></wbr>some-<wbr></wbr>system?</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._string-~3epath%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">string-<wbr></wbr>>path</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._bytes-~3epath%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">bytes-<wbr></wbr>>path</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-~3estring%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">path-<wbr></wbr>>string</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-~3ebytes%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">path-<wbr></wbr>>bytes</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._string-~3epath-element%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">string-<wbr></wbr>>path-<wbr></wbr>element</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._bytes-~3epath-element%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">bytes-<wbr></wbr>>path-<wbr></wbr>element</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-element-~3estring%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">path-<wbr></wbr>element-<wbr></wbr>>string</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-element-~3ebytes%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">path-<wbr></wbr>element-<wbr></wbr>>bytes</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path~3c~3f%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">path<?</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-convention-type%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">path-<wbr></wbr>convention-<wbr></wbr>type</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._system-path-convention-type%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">system-<wbr></wbr>path-<wbr></wbr>convention-<wbr></wbr>type</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._build-path%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">build-<wbr></wbr>path</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._build-path%2Fconvention-type%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">build-<wbr></wbr>path/<span class="mywbr"> </span>convention-<wbr></wbr>type</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._absolute-path~3f%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">absolute-<wbr></wbr>path?</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._relative-path~3f%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">relative-<wbr></wbr>path?</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._complete-path~3f%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">complete-<wbr></wbr>path?</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-~3ecomplete-path%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">path-<wbr></wbr>>complete-<wbr></wbr>path</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-~3edirectory-path%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">path-<wbr></wbr>>directory-<wbr></wbr>path</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._resolve-path%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">resolve-<wbr></wbr>path</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._cleanse-path%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">cleanse-<wbr></wbr>path</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._expand-user-path%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">expand-<wbr></wbr>user-<wbr></wbr>path</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._simplify-path%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">simplify-<wbr></wbr>path</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._normal-case-path%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">normal-<wbr></wbr>case-<wbr></wbr>path</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._split-path%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">split-<wbr></wbr>path</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._explode-path%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">explode-<wbr></wbr>path</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-replace-extension%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">path-<wbr></wbr>replace-<wbr></wbr>extension</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-add-extension%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">path-<wbr></wbr>add-<wbr></wbr>extension</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-replace-suffix%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">path-<wbr></wbr>replace-<wbr></wbr>suffix</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._path-add-suffix%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">path-<wbr></wbr>add-<wbr></wbr>suffix</span></span></a></td></tr><tr><td><a href="Manipulating_Paths.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._reroot-path%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">reroot-<wbr></wbr>path</span></span></a></td></tr></table></div></div><div class="maincolumn"><div class="main"><div class="navsettop"><span class="navleft"><form class="searchform"><input class="searchbox" id="searchbox" type="text" tabindex="1" placeholder="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, "8.6", "../");"/></form> <a href="https://docs.racket-lang.org/index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot("8.6");">top</a><span class="tocsettoggle"> <a href="javascript:void(0);" title="show/hide table of contents" onclick="TocsetToggle();">contents</a></span></span><span class="navright"> <a href="pathutils.html" title="backward to "15.1 Paths"" data-pltdoc="x">← prev</a> <a href="pathutils.html" title="up to "15.1 Paths"" data-pltdoc="x">up</a> <a href="More_Path_Utilities.html" title="forward to "15.1.2 More Path Utilities"" data-pltdoc="x">next →</a></span> </div><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""Manipulating_Paths"">15.1.1<tt> </tt><a name="(part._.Manipulating_.Paths)"></a>Manipulating Paths</h5><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~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~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">path?</a></span></span><span class="hspace"> </span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">v</span><span class="hspace"> </span>:<span class="hspace"> </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 the current
|
|
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"> </span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">v</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">v</span><span class="hspace"> </span>:<span class="hspace"> </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->path</a></span></span><span class="hspace"> </span><span class="RktVar">str</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">str</span><span class="hspace"> </span>:<span class="hspace"> </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->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->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->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->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->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->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->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->path</a></span></span><span class="hspace"> </span><span class="RktVar">bstr</span><span class="hspace"> </span><span class="RktOpt">[</span><span class="RktVar">type</span><span class="RktOpt">]</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">bstr</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">type</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVal">'</span><span class="RktVal">unix</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">windows</span><span class="RktPn">)</span><span class="hspace"> </span>=<span class="hspace"> </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->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->string</a></span></span><span class="hspace"> </span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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>’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->path</a></span>,
|
|
since decoding and re-encoding the path’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->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->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->bytes</a></span></span><span class="hspace"> </span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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>’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->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->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->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->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->path-element</a></span></span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">str</span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </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"> </span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace"> </span>→<span class="hspace"> </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"> </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"> </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"> </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"> </span><span class="RktVal">#f</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">str</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">false-on-non-element?</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span>=<span class="hspace"> </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->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->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->path-element</a></span></span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">bstr</span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">type</span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </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"> </span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace"> </span>→<span class="hspace"> </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"> </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"> </span><span class="RktVal">#f</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">bstr</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">type</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVal">'</span><span class="RktVal">unix</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">windows</span><span class="RktPn">)</span><span class="hspace"> </span>=<span class="hspace"> </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"> </span><span class="RktVar">false-on-non-element?</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span>=<span class="hspace"> </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._bytes-~3epath%29%29" class="RktValLink" data-pltdoc="x">bytes->path</a></span>, except that <span class="RktVar">bstr</span> corresponds to a
|
|
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->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->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->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->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->string</a></span></span><span class="hspace"> </span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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->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->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->bytes</a></span></span><span class="hspace"> </span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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->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->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’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->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->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<?</a></span></span><span class="hspace"> </span><span class="RktVar">a-path</span><span class="hspace"> </span><span class="RktVar">b-path</span><span class="hspace"> </span><span class="RktMeta">...</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">a-path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">b-path</span><span class="hspace"> </span>:<span class="hspace"> </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->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<?</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"> </span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVal">'</span><span class="RktVal">unix</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">windows</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span>→<span class="hspace"> </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"> </span><span class="RktVal">'</span><span class="RktVal">unix</span><span class="hspace"> </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"> </span><span class="RktVar">base</span><span class="hspace"> </span><span class="RktVar">sub</span><span class="hspace"> </span><span class="RktMeta">...</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">base</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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"> </span><span class="RktVal">'</span><span class="RktVal">up</span><span class="hspace"> </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"> </span></td><td valign="top"><span class="RktVar">sub</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">:</td><td valign="top"><span class="hspace"> </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"> </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"> </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"> </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"> </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"> </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"> </span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._complete-path~3f%29%29" class="RktValLink" data-pltdoc="x">complete-path?</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </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"> </span><span class="RktVal">'</span><span class="RktVal">up</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">same</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Creates a path given a base path and any number of sub-path
|
|
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’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"> </span><span class="RktSym">p1</span><span class="hspace"> </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"> </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"> </span><span class="RktVal">"src"</span><span class="hspace"> </span><span class="RktVal">"racket"</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktCmt">;</span><span class="RktCmt"> </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"> </span><span class="RktCmt">;</span><span class="RktCmt"> </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"> </span><span class="RktSym">p2</span><span class="hspace"> </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"> </span><span class="RktVal">'</span><span class="RktVal">up</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">up</span><span class="hspace"> </span><span class="RktVal">"docs"</span><span class="hspace"> </span><span class="RktVal">"Racket"</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktCmt">;</span><span class="RktCmt"> </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"> </span><span class="RktCmt">;</span><span class="RktCmt"> </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"> </span><span class="RktSym">p2</span><span class="hspace"> </span><span class="RktSym">p1</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktCmt">;</span><span class="RktCmt"> </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"> </span><span class="RktSym">p1</span><span class="hspace"> </span><span class="RktSym">p2</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktCmt">;</span><span class="RktCmt"> </span><span class="RktCmt">Unix: is </span><span class="RktVal">"/home/joeuser/src/racket/../../docs/Racket"</span></td></tr><tr><td><span class="hspace"> </span><span class="RktCmt">;</span><span class="RktCmt"> </span><span class="RktCmt">Windows: is </span><span class="RktVal">"C:\\Joe's Files\\src\\racket\\..\\..\\docs\\Racket"</span></td></tr></table></blockquote><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)._build-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._build-path%2Fconvention-type%29%29" class="RktValDef RktValLink" data-pltdoc="x">build-path/convention-type</a></span></span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">type</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">base</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">sub</span><span class="hspace"> </span><span class="RktMeta">...</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </span></td><td valign="top"><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></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">type</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVal">'</span><span class="RktVal">unix</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">windows</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">base</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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"> </span><span class="RktVal">'</span><span class="RktVal">up</span><span class="hspace"> </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"> </span></td><td valign="top"><span class="RktVar">sub</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">:</td><td valign="top"><span class="hspace"> </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"> </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"> </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"> </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"> </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"> </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"> </span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._complete-path~3f%29%29" class="RktValLink" data-pltdoc="x">complete-path?</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </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"> </span><span class="RktVal">'</span><span class="RktVal">up</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">same</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Like <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>, except a path convention type is specified
|
|
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->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"> </span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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"> </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"> </span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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"> </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"> </span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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"> </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->complete-path</a></span></span><span class="hspace"> </span><span class="RktVar">path</span><span class="hspace"> </span><span class="RktOpt">[</span><span class="RktVar">base</span><span class="RktOpt">]</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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"> </span></td><td valign="top"><span class="RktVar">base</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">:</td><td valign="top"><span class="hspace"> </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"> </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"> </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"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">=</td><td valign="top"><span class="hspace"> </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->directory-path</a></span></span><span class="hspace"> </span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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"> </span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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">> </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"> </span><span class="RktPn">(</span><span class="RktPn">[</span><span class="RktSym">p</span><span class="hspace"> </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->some-system-path</a></span><span class="hspace"> </span><span class="RktVal">"tiny//dancer"</span><span class="hspace"> </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"> </span><span class="hspace"> </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"> </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">#<path:tiny/dancer></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"> </span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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’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"> </span><span class="RktVar">path</span><span class="hspace"> </span><span class="RktOpt">[</span><span class="RktVar">use-filesystem?</span><span class="RktOpt">]</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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"> </span><span class="RktVar">use-filesystem?</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span>=<span class="hspace"> </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—<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">> </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"> </span><span class="RktPn">(</span><span class="RktPn">[</span><span class="RktSym">p</span><span class="hspace"> </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->some-system-path</a></span><span class="hspace"> </span><span class="RktVal">"tiny//in/my/head/../../../dancer"</span><span class="hspace"> </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"> </span><span class="hspace"> </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"> </span><span class="RktSym">p</span><span class="hspace"> </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">#<path:tiny/dancer></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"> </span><span class="RktVar">path</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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 “normalized” 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’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"> </span><span class="RktVar">path</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </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"> </span><span class="RktVal">'</span><span class="RktVal">relative</span><span class="hspace"> </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"> </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"> </span><span class="RktVal">'</span><span class="RktVal">up</span><span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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"> </span><span class="RktVar">path</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace"> </span>→<span class="hspace"> </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"> </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"> </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"> </span><span class="RktVal">'</span><span class="RktVal">up</span><span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span><span class="RktVar">ext</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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"> </span><span class="RktVar">ext</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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">> </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"> </span><span class="RktVal">"x/y.ss"</span><span class="hspace"> </span><span class="RktVal">#".rkt"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#<path:x/y.rkt></span></p></td></tr><tr><td><span class="stt">> </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"> </span><span class="RktVal">"x/y.ss"</span><span class="hspace"> </span><span class="RktVal">#""</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#<path:x/y></span></p></td></tr><tr><td><span class="stt">> </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"> </span><span class="RktVal">"x/y"</span><span class="hspace"> </span><span class="RktVal">#".rkt"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#<path:x/y.rkt></span></p></td></tr><tr><td><span class="stt">> </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"> </span><span class="RktVal">"x/y.tar.gz"</span><span class="hspace"> </span><span class="RktVal">#".rkt"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#<path:x/y.tar.rkt></span></p></td></tr><tr><td><span class="stt">> </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"> </span><span class="RktVal">"x/.racketrc"</span><span class="hspace"> </span><span class="RktVal">#".rkt"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#<path:x/.racketrc.rkt></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"> </span><span class="RktVar">path</span><span class="hspace"> </span><span class="RktVar">ext</span><span class="hspace"> </span><span class="RktOpt">[</span><span class="RktVar">sep</span><span class="RktOpt">]</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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"> </span><span class="RktVar">ext</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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><tr><td><span class="hspace"> </span><span class="RktVar">sep</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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><span class="hspace"> </span>=<span class="hspace"> </span><span class="RktVal">#"_"</span></td></tr></table></blockquote></div><div class="SIntrapara">Similar to <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>, but any existing extension on
|
|
<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">> </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"> </span><span class="RktVal">"x/y.ss"</span><span class="hspace"> </span><span class="RktVal">#".rkt"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#<path:x/y_ss.rkt></span></p></td></tr><tr><td><span class="stt">> </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"> </span><span class="RktVal">"x/y"</span><span class="hspace"> </span><span class="RktVal">#".rkt"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#<path:x/y.rkt></span></p></td></tr><tr><td><span class="stt">> </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"> </span><span class="RktVal">"x/y.tar.gz"</span><span class="hspace"> </span><span class="RktVal">#".rkt"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#<path:x/y.tar_gz.rkt></span></p></td></tr><tr><td><span class="stt">> </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"> </span><span class="RktVal">"x/y.tar.gz"</span><span class="hspace"> </span><span class="RktVal">#".rkt"</span><span class="hspace"> </span><span class="RktVal">#"."</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#<path:x/y.tar.gz.rkt></span></p></td></tr><tr><td><span class="stt">> </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"> </span><span class="RktVal">"x/.racketrc"</span><span class="hspace"> </span><span class="RktVal">#".rkt"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#<path:x/.racketrc.rkt></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"> </span><span class="RktVar">path</span><span class="hspace"> </span><span class="RktVar">ext</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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"> </span><span class="RktVar">ext</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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-replace-extension%29%29" class="RktValLink" data-pltdoc="x">path-replace-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-replace-extension%29%29" class="RktValLink" data-pltdoc="x">path-replace-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)._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"> </span><span class="RktVar">path</span><span class="hspace"> </span><span class="RktVar">ext</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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"> </span><span class="RktVar">ext</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span><span class="RktVar">root-path</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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"> </span><span class="RktVar">root-path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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->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">> </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"> </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->path</a></span><span class="hspace"> </span><span class="RktVal">#"/home/caprica/baltar"</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">unix</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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->path</a></span><span class="hspace"> </span><span class="RktVal">#"/earth"</span><span class="hspace"> </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">#<path:/earth/home/caprica/baltar></span></p></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">> </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"> </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->path</a></span><span class="hspace"> </span><span class="RktVal">#"c:\\usr\\adama"</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">windows</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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->path</a></span><span class="hspace"> </span><span class="RktVal">#"\\\\earth\\africa\\"</span><span class="hspace"> </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">#<windows-path:\\earth\africa\c\usr\adama></span></p></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">> </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"> </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->path</a></span><span class="hspace"> </span><span class="RktVal">#"\\\\galactica\\cac\\adama"</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">windows</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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->path</a></span><span class="hspace"> </span><span class="RktVal">#"s:\\earth\\africa\\"</span><span class="hspace"> </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">#<windows-path:s:\earth\africa\UNC\galactica\cac\adama></span></p></td></tr></table></blockquote></div></p><div class="navsetbottom"><span class="navleft"><form class="searchform"><input class="searchbox" id="searchbox" type="text" tabindex="1" placeholder="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, "8.6", "../");"/></form> <a href="https://docs.racket-lang.org/index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot("8.6");">top</a><span class="tocsettoggle"> <a href="javascript:void(0);" title="show/hide table of contents" onclick="TocsetToggle();">contents</a></span></span><span class="navright"> <a href="pathutils.html" title="backward to "15.1 Paths"" data-pltdoc="x">← prev</a> <a href="pathutils.html" title="up to "15.1 Paths"" data-pltdoc="x">up</a> <a href="More_Path_Utilities.html" title="forward to "15.1.2 More Path Utilities"" data-pltdoc="x">next →</a></span> </div></div></div><div id="contextindicator"> </div></body></html> |