Changes

Jump to navigation Jump to search
4,872 bytes added ,  09:38, 26 September 2022
This [[Module Library|XQuery Module]] contains functions related to file system operations, such as listing, reading, or writing files.
This module is based on the [http://expath.org/spec/file EXPath File Module].The following enhancements have not been added to the specification yet: {| class="wikitable"|- valign="top"! Function! Description|- valign="top"| {{Function||file:descendants}}| new function|- valign="top"| {{Function||file:is-absolute}}| new function|- valign="top"| {{Function||file:read-text}}, {{Function||file:read-text-lines}}| <code>$fallback</code> argument added|- valign="top"| {{Function||file:read-text-lines}}| <code>$offset</code> and <code>$length</code> arguments added|- valign="top"| {{Function||file:resolve-path}}| <code>$base</code> argument added|}
=Conventions=
For serialization parameters, the <code><nowiki>http://www.w3.org/2010/xslt-xquery-serialization</nowiki></code> namespace is used, which is statically bound to the {{Code|output}} prefix.<br/>
Returned strings that refer to existing directories are suffixed with a directory separator. The error <code>[[#Errors|invalid-path]]</code> is raised if a path is invalid. ==File Paths== * All file paths are resolved against the ''current working directory'' (the directory from which BaseX or, more generally, the Java Virtual Machine, was started). This directory can be retrieved via {{Function||file:base-dir}}. * A path can be specified as local filesystem path or as file URI. * Returned strings that refer to existing directories are suffixed with a directory separator.
=Read Operations=
==file:list==
 
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:list|$dir as xs:string|xs:string*}}<br />{{Func|file:list|$dir as xs:string, $recursive as xs:boolean|xs:string*}}<br />{{Func|file:list|$dir as xs:string, $recursive as xs:boolean, $pattern as xs:string|xs:string*}}<br />
|-valign="top"
| '''Summary'''
|Lists all files and directories found in the specified {{Code|$dir}}. The returned paths are relative to the provided path.<br />The optional parameter {{Code|$recursive}} specifies whether sub-directories subdirectories will be traversed, too.<br />The optional parameter {{Code|$pattern}} defines a file name pattern in the [[Commands#Glob_Syntax|Glob Syntax]]. If present, only those files and directories are returned that correspond to the pattern. Several patterns can be separated with a comma ({{Code|,}}).<br />|-valign="top"
| '''Errors'''
|{{Error|not-found|#Errors}} the specified file does not exist.<br />{{Error|no-dir|#Errors}} the specified path does not point to a directory.<br />{{Error|io-error|#Errors}} the operation fails for some other reason.<br />
|- valign="top"
| '''Examples'''
| Return the contents of large {Code|.txt} files located in a specific directory and its subdirectories:
<syntaxhighlight lang="xquery">
let $root := 'path/to/files/'
for $file in file:list($root, true(), '*.txt')
let $path := $root || $file
where file:size($path) > 1000000
return file:read-text($path)
</syntaxhighlight>
|}
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:children|$dir as xs:string|xs:string*}}
|-valign="top"| '''Summary'''|Returns the full paths to all files and directories found in the specified {{Code|$dir}}.<br/>The inverse function is {{Function||file:parent}}. The returned paths start with the specified directory. The related function {{Function||file:list}} returns relative file paths.|- valign="top"| '''Errors'''|{{Error|not-found|#Errors}} the specified file does not exist.<br />{{Error|no-dir|#Errors}} the specified path does not point to a directory.<br />{{Error|io-error|#Errors}} the operation fails for some other reason.<br />|- valign="top"| '''Examples'''| Return the contents of large {Code|.txt} files located in a specific directory:<syntaxhighlight lang="xquery">for $file in file:children('path/to/files/')where matches($file, '.txt', 'i') and file:size($file) > 1000000return file:read-text($$file)</syntaxhighlight>|} ==file:descendants== {| width='100%'|- valign="top"| width='120' | '''Signatures'''|{{Func|file:descendants|$dir as xs:string|xs:string*}}|- valign="top"
| '''Summary'''
|Returns the full paths to all files and directories found in the specified {{Code|$dir}}and its subdirectories.<br/>. The inverse function is [[#file:parent|file:parent]]returned paths start with the specified directory. The related function [[#file:list{{Function||file:list]] returns }} creates relative file paths.|-valign="top"
| '''Errors'''
|{{Error|not-found|#Errors}} the specified file does not exist.<br />{{Error|no-dir|#Errors}} the specified path does not point to a directory.<br />{{Error|io-error|#Errors}} the operation fails for some other reason.<br />
|- valign="top"
| '''Examples'''
| Return the contents of all {Code|.txt} files located in a specific directory and its subdirectories:
<syntaxhighlight lang="xquery">
for $file in file:descendants('path/to/files/')
where matches($file, '.txt', 'i') and file:size($file) > 1000000
return file:read-text($$file)
</syntaxhighlight>
|}
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:read-binary|$path as xs:string|xs:base64Binary}}<br />{{Func|file:read-binary|$path as xs:string, $offset as xs:integer|xs:base64Binary}}<br />{{Func|file:read-binary|$path as xs:string, $offset as xs:integer, $length as xs:integer|xs:base64Binary}}
|-valign="top"
| '''Summary'''
|Reads the binary content of the file specified by {{Code|$path}} and returns it as [[Streaming Lazy Module|streamablelazy]] {{Code|xs:base64Binary}}item.<br />The optional parameters {{Code|$offset}} and {{Code|$length}} can be used to read chunks of a file.|-valign="top"
| '''Errors'''
|{{Error|not-found|#Errors}} the specified file does not exist.<br />{{Error|is-dir|#Errors}} the specified path is a directory.<br />{{Error|out-of-range|#Errors}} the offset or length is negative, or the chosen values would exceed the file bounds.<br />{{Error|io-error|#Errors}} the operation fails for some other reason.<br />
|-valign="top"
| '''Examples'''
|
* <code><nowiki>streamlazy:materializecache(file:read-binary("config.data"))</nowiki></code> returns a materialized representation of enforces the streamable resultfile access (otherwise, it will be delayed until requested first).
|}
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:read-text|$path as xs:string|xs:string}}<br />{{Func|file:read-text|$path as xs:string, $encoding as xs:string|xs:string}}<br />{{Func|file:read-text|$path as xs:string, $encoding as xs:string, $fallback as xs:boolean|xs:string}}<br />
|-valign="top"
| '''Summary'''
|Reads the textual contents of the file specified by {{Code|$path}} and returns it as [[Streaming Lazy Module|streamablelazy]] {{Code|xs:string}}item:
* The UTF-8 default encoding can be overwritten with the optional {{Code|$encoding}} argument.
* By default, invalid characters will be rejected. If {{Code|$fallback}} is set to true, these characters will be replaced with the Unicode replacement character <code>FFFD</code> (&#xFFFD;).
|-valign="top"
| '''Errors'''
|{{Error|not-found|#Errors}} the specified file does not exist.<br />{{Error|is-dir|#Errors}} the specified path is a directory.<br />{{Error|unknown-encoding|#Errors}} the specified encoding is not supported, or unknown.<br />{{Error|io-error|#Errors}} the operation fails for some other reason.
|-valign="top"
| '''Examples'''
|
* <code><nowiki>streamlazy:materializecache(file:read-text("configids.txt"))</nowiki></code> returns a materialized representation of enforces the streamable resultfile access (otherwise, it will be delayed until requested first).
|}
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:read-text-lines|$path as xs:string|xs:string*}}<br />{{Func|file:read-text-lines|$path as xs:string, $encoding as xs:string|xs:string*}}<br />{{Func|file:read-text-lines|$path as xs:string, $encoding as xs:string, $fallback as xs:boolean|xs:string*}}<br />{{Func|file:read-text-lines|$path as xs:string, $encoding as xs:string, $fallback as xs:boolean, $offset as xs:integer|xs:string*}}<br />{{Func|file:read-text-lines|$path as xs:string, $encoding as xs:string, $fallback as xs:boolean, $offset as xs:integer, $length as xs:integer|xs:string*}}<br />|-valign="top"
| '''Summary'''
|Reads the textual contents of the file specified by {{Code|$path}} and returns it as a sequence of {{Code|xs:string}} items:
* The UTF-8 default encoding can be overwritten with the optional {{Code|$encoding}} argument.
* By default, invalid characters will be rejected. If {{Code|$fallback}} is set to true, these characters will be replaced with the Unicode replacement character <code>FFFD</code> (&#xFFFD;).
The lines to be read can be restricted with the optional parameters {{Code|$offset}} and {{Code|$length}}.|-valign="top"
| '''Errors'''
|{{Error|not-found|#Errors}} the specified file does not exist.<br />{{Error|is-dir|#Errors}} the specified path is a directory.<br />{{Error|unknown-encoding|#Errors}} the specified encoding is not supported, or unknown.<br />{{Error|io-error|#Errors}} the operation fails for some other reason.<br />
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:create-dir|$dir as xs:string|empty-sequence()}}<br />
|-valign="top"
| '''Summary'''
|Creates the directory specified by {{Code|$dir}}, including all nonif it does not already exist. Non-existing parent directorieswill be created as well.<br />|-valign="top"
| '''Errors'''
|{{Error|exists|#Errors}} a file with the same path already specified target exists, but is no directory.<br />{{Error|io-error|#Errors}} the operation fails for some other reason.<br />
|}
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:create-temp-dir|$prefix as xs:string, $suffix as xs:string|xs:string}}<br />{{Func|file:create-temp-dir|$prefix as xs:string, $suffix as xs:string, $dir as xs:string|xs:string}}
|-valign="top"
| '''Summary'''
|Creates a new temporary directory that did not exist before this function was called, and returns its full file path. The directory name begins and ends with the specified {{Code|$prefix}} and {{Code|$suffix}}. If no directory is specified via {{Code|$dir}}, the directory will be placed in the system’s default temporary directory. The operation will create all non-existing parent directories.
|-valign="top"
| '''Errors'''
|{{Error|no-dir|#Errors}} the specified directory points to a file.<br />{{Error|io-error|#Errors}} the directory could not be created.
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:create-temp-file|$prefix as xs:string, $suffix as xs:string|xs:string}}<br />{{Func|file:create-temp-file|$prefix as xs:string, $suffix as xs:string, $dir as xs:string|xs:string}}
|-valign="top"
| '''Summary'''
|Creates a new temporary file that did not exist before this function was called, and returns its full file path. The file name begins and ends with the specified {{Code|$prefix}} and {{Code|$suffix}}. If no directory is specified via {{Code|$dir}}, the file will be placed in the system’s default temporary directory. The operation will create all non-existing parent directories.
|-valign="top"
| '''Errors'''
|{{Error|no-dir|#Errors}} the specified directory points to a file.<br />{{Error|io-error|#Errors}} the directory could not be created.
==file:delete==
 
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:delete|$path as xs:string|empty-sequence()}}<br />{{Func|file:delete|$path as xs:string, $recursive as xs:boolean|empty-sequence()}}<br />
|-valign="top"
| '''Summary'''
|Recursively deletes a file or directory specified by {{Code|$path}}.<br />The optional parameter {{Code|$recursive}} specifies whether sub-directories subdirectories will be deleted, too.<br />|-valign="top"
| '''Errors'''
|{{Error|not-found|#Errors}} the specified path does not exist.<br />{{Error|io-error|#Errors}} the operation fails for some other reason.<br />
==file:write==
 
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:write|$path as xs:string, $items as item()*|empty-sequence()}}<br />{{Func|file:write|$path as xs:string, $items as item()*, $params as item()|empty-sequence()}}<br />
|-valign="top"
| '''Summary'''
|Writes a serialized sequence of items to the specified file. If the file already exists, it will be overwritten.<br />The {{Code|$params}} argument contains serialization parameters (see [[Serialization|serialization parameters]] for more details. As with [https://www.w3.org/TR/xpath-functions-31/#func-serialize fn:serialize()], which the parameters can either be specified<br />* either as children of an {{Code|&lt;output:serialization-parameters/&gt;}} element, as defined for the [http://www.w3.org/TR/xpath-functions-30/#func-serialize fn:serialize()] function; e.g.:<pre classsyntaxhighlight lang="brush:xml">
<output:serialization-parameters>
<output:method value='xml'/>
...
</output:serialization-parameters>
</presyntaxhighlight>* or as map, which contains all key/value pairs:<pre classsyntaxhighlight lang="brush:xmlxquery">
map { "method": "xml", "cdata-section-elements": "div", ... }
</presyntaxhighlight>|-valign="top"
| '''Errors'''
|{{Error|no-dir|#Errors}} the parent of specified path is no directory.<br />{{Error|is-dir|#Errors}} the specified path is a directory.<br />{{Error|io-error|#Errors}} the operation fails for some other reason.<br />
|- valign="top"
| '''Examples'''
|
* <code><nowiki>file:write('data.bin', xs:hexBinary('414243'))</nowiki></code> writes a hex representation to the specified file.
* <code><nowiki>file:write('data.bin', xs:hexBinary('414243'), map { 'method': 'basex')</nowiki></code> writes binary data to the specified file (see [[XQuery_Extensions#Serialization|Serialization]] for more details).
|}
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:write-binary|$path as xs:string, $value as xs:anyAtomicType|empty-sequence()}}<br />{{Func|file:write-binary|$path as xs:string, $value as xs:anyAtomicType, $offset as xs:integer|empty-sequence()}}<br />
|-valign="top"
| '''Summary'''
|Writes a binary item (xs:base64Binary, xs:hexBinary) to the specified file. If the file already exists, it will be overwritten.<br />If {{Code|$offset}} is specified, data will be written at this file position. An existing file may be resized by that operation.
|-valign="top"
| '''Errors'''
|{{Error|no-dir|#Errors}} the parent of specified path is no directory.<br />{{Error|is-dir|#Errors}} the specified path is a directory.<br />{{Error|out-of-range|#Errors}} the offset is negative, or it exceeds the current file size.<br/>{{Error|io-error|#Errors}} the operation fails for some other reason.<br />
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:write-text|$path as xs:string, $value as xs:string|empty-sequence()}}<br />{{Func|file:write-text|$path as xs:string, $value as xs:string, $encoding as xs:string|empty-sequence()}}<br />
|-valign="top"
| '''Summary'''
|Writes a string to the specified file. If the file already exists, it will be overwritten.<br />The optional parameter {{Code|$encoding}} defines the output encoding (default: UTF-8).<br />
|-valign="top"
| '''Errors'''
|{{Error|no-dir|#Errors}} the parent of specified path is no directory.<br />{{Error|is-dir|#Errors}} the specified path is a directory.<br />{{Error|unknown-encoding|#Errors}} the specified encoding is not supported, or unknown.<br />{{Error|io-error|#Errors}} the operation fails for some other reason.<br />
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:write-text-lines|$path as xs:string, $values as xs:string*|empty-sequence()}}<br />{{Func|file:write-text-lines|$path as xs:string, $values as xs:string*, $encoding as xs:string|empty-sequence()}}<br />
|-valign="top"
| '''Summary'''
|Writes a sequence of strings to the specified file, each followed by the system specific newline character. If the file already exists, it will be overwritten.<br />The optional parameter {{Code|$encoding}} defines the output encoding (default: UTF-8).<br />
|-valign="top"
| '''Errors'''
|{{Error|no-dir|#Errors}} the parent of specified path is no directory.<br />{{Error|is-dir|#Errors}} the specified path is a directory.<br />{{Error|unknown-encoding|#Errors}} the specified encoding is not supported, or unknown.<br />{{Error|io-error|#Errors}} the operation fails for some other reason.<br />
==file:append==
 
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:append|$path as xs:string, $items as item()*|empty-sequence()}}<br />{{Func|file:append|$path as xs:string, $items as item()*, $params as item()|empty-sequence()}}<br />
|-valign="top"
| '''Summary'''
|Appends a serialized sequence of items to the specified file. If the file does not exists, a new file is created.<br />
|-valign="top"
| '''Errors'''
|{{Error|no-dir|#Errors}} the parent of specified path is no directory.<br />{{Error|is-dir|#Errors}} the specified path is a directory.<br />{{Error|io-error|#Errors}} the operation fails for some other reason.<br />
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:append-binary|$path as xs:string, $value as xs:anyAtomicType|empty-sequence()}}<br />
|-valign="top"
| '''Summary'''
|Appends a binary item (xs:base64Binary, xs:hexBinary) to the specified file. If the file does not exists, a new one is created.<br />
|-valign="top"
| '''Errors'''
|{{Error|no-dir|#Errors}} the parent of specified path is no directory.<br />{{Error|is-dir|#Errors}} the specified path is a directory.<br />{{Error|io-error|#Errors}} the operation fails for some other reason.<br />
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:append-text|$path as xs:string, $value as xs:string|empty-sequence()}}<br />{{Func|file:append-text|$path as xs:string, $value as xs:string, $encoding as xs:string|empty-sequence()}}<br />
|-valign="top"
| '''Summary'''
|Appends a string to a file specified by {{Code|$path}}. If the specified file does not exists, a new file is created.<br />The optional parameter {{Code|$encoding}} defines the output encoding (default: UTF-8).<br />
|-valign="top"
| '''Errors'''
|{{Error|no-dir|#Errors}} the parent of specified path is no directory.<br />{{Error|is-dir|#Errors}} the specified path is a directory.<br />{{Error|unknown-encoding|#Errors}} the specified encoding is not supported, or unknown.<br />{{Error|io-error|#Errors}} the operation fails for some other reason.<br />
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:append-text-lines|$path as xs:string, $values as xs:string*|empty-sequence()}}<br />{{Func|file:append-text-lines|$path as xs:string, $values as xs:string*, $encoding as xs:string|empty-sequence()}}<br />
|-valign="top"
| '''Summary'''
|Appends a sequence of strings to the specified file, each followed by the system specific newline character. If the specified file does not exists, a new file is created.<br />The optional parameter {{Code|$encoding}} defines the output encoding (default: UTF-8).<br />
|-valign="top"
| '''Errors'''
|{{Error|no-dir|#Errors}} the parent of specified path is no directory.<br />{{Error|is-dir|#Errors}} the specified path is a directory.<br />{{Error|unknown-encoding|#Errors}} the specified encoding is not supported, or unknown.<br />{{Error|io-error|#Errors}} the operation fails for some other reason.<br />
|}
==file:copy==
==file:copy==
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:copy|$source as xs:string, $target as xs:string|empty-sequence()}}<br />
|-valign="top"
| '''Summary'''
|Copies a file or directory specified by {{Code|$source}} to the file or directory specified by {{Code|$target}}. If the target file already exists, it will be overwritten. No operation will be performed if the source and target path are equal.<br />
|-valign="top"
| '''Errors'''
|{{Error|not-found|#Errors}} the specified source does not exist.<br />{{Error|exists|#Errors}} the specified source is a directory and the target is a file.<br />{{Error|no-dir|#Errors}} the parent of the specified target is no directory.<br />{{Error|io-error|#Errors}} the operation fails for some other reason.<br />
==file:move==
 
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:move|$source as xs:string, $target as xs:string|empty-sequence()}}<br />
|-valign="top"
| '''Summary'''
|Moves or renames the file or directory specified by {{Code|$source}} to the path specified by {{Code|$target}}. If the target file already exists, it will be overwritten. No operation will be performed if the source and target path are equal.<br />
|-valign="top"
| '''Errors'''
|{{Error|not-found|#Errors}} the specified source does not exist.<br />{{Error|exists|#Errors}} the specified source is a directory and the target is a file.<br />{{Error|no-dir|#Errors}} the parent of the specified target is no directory.<br />{{Error|io-error|#Errors}} the operation fails for some other reason.<br />
==file:exists==
 
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:exists|$path as xs:string|xs:boolean}}<br />
|-valign="top"
| '''Summary'''
|Returns an {{Code|xs:boolean}} indicating whether a file or directory specified by {{Code|$path}} exists in the file system.<br />
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:is-dir|$path as xs:string|xs:boolean}}<br />
|-valign="top"
| '''Summary'''
|Returns an {{Code|xs:boolean}} indicating whether the argument {{Code|$path}} points to an existing directory.<br />
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:is-absolute|$path as xs:string|xs:boolean}}<br />
|-valign="top"
| '''Summary'''
|Returns an {{Code|xs:boolean}} indicating whether the argument {{Code|$path}} is absolute.<br />The behavior of this function depends on the operating system: On Windows, an absolute path starts with the drive letter and a colon, whereas on Linux it starts with a slash.
==file:is-file==
 
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:is-file|$path as xs:string|xs:boolean}}<br />
|-valign="top"
| '''Summary'''
|Returns an {{Code|xs:boolean}} indicating whether the argument {{Code|$path}} points to an existing file.<br />
==file:last-modified==
 
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:last-modified|$path as xs:string|xs:dateTime}}<br />
|-valign="top"
| '''Summary'''
|Retrieves the timestamp of the last modification of the file or directory specified by {{Code|$path}}.<br />
|-valign="top"
| '''Errors'''
|{{Error|not-found|#Errors}} the specified path does not exist.<br />
==file:size==
 
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:size|$file path as xs:string|xs:integer}}<br />|-valign="top"
| '''Summary'''
|Returns the size, in bytes, of the file specified by {{Code|$path}}, or {{Code|0}} for directories.<br />
|-valign="top"
| '''Errors'''
|{{Error|not-found|#Errors}} the specified file does not exist.<br />
==file:name==
 
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:name|$path as xs:string|xs:string}}
|-valign="top"
| '''Summary'''
|Returns the name of a file or directory specified by {{Code|$path}}. An empty string is returned if the path points to the root directory.
{| width='100%'
 |-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:parent|$path as xs:string|xs:string?}}<br />
|-valign="top"
| '''Summary'''
|Returns the absolute path to the parent directory of a file or directory specified by {{Code|$path}}. An empty sequence is returned if the path points to a root directory.<br/>The inverse function is [[#file:children{{Function||file:children]]}}.<br />|-valign="top"
| '''Examples'''
|
==file:path-to-native==
 
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:path-to-native|$path as xs:string|xs:string}}<br />
|-valign="top"
| '''Summary'''
|Transforms the {{Code|$path}} argument to its native representation on the operating system.<br />
|-valign="top"
| '''Errors'''
|{{Error|not-found|#Errors}} the specified file does not exist.<br />{{Error|io-error|#Errors}} the specified path cannot be transformed to its native representation.<br />
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:resolve-path|$path as xs:string|xs:string}}<br />{{Func|file:resolve-path|$path as xs:string, $base as xs:string|xs:string}}<br />
|-valign="top"
| '''Summary'''
|Transforms the {{Code|$path}} argument to an absolute operating system path.<br />If the path is relative, and if an absolute {{Code|$base}} path is specified, it will be resolved against this path.
|-valign="top"
| '''Errors'''
|{{Error|is-relative|#Errors}} the specified base path is relative.<br />
|-valign="top"
| '''Examples'''
|The following examples apply to Windows:
==file:path-to-uri==
 
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:path-to-uri|$path as xs:string|xs:string}}<br />
|-valign="top"
| '''Summary'''
|Transforms the path specified by {{Code|$path}} into a URI with the {{Code|file://}} scheme.<br />
==file:dir-separator==
 
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Code|'''file:dir-separator'''() as xs:string}}<br />
|-valign="top"
| '''Summary'''
|Returns the directory separator used by the operating system, such as {{Code|/}} or {{Code|\}}.<br />
==file:path-separator==
 
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Code|'''file:path-separator'''() as xs:string}}<br />
|-valign="top"
| '''Summary'''
|Returns the path separator used by the operating system, such as {{Code|;}} or {{Code|:}}.<br />
==file:line-separator==
 
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:line-separator||xs:string}}
|-valign="top"
| '''Summary'''
|Returns the line separator used by the operating system, such as {{Code|&amp;#10;}}, {{Code|&amp;#13;&amp;#10;}} or {{Code|&amp;#13;}}.<br />
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:temp-dir||xs:string}}
|-valign="top"
| '''Summary'''
|Returns the system’s default temporary-file directory.<br />
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:current-dir||xs:string}}
|-valign="top"
| '''Summary'''
|Returns the ''current working directory'', i.e., the directory from which the query processor was started. - This function returns the same result as the function call <code>file:resolve-path("")</code><br />.
|}
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|file:base-dir||xs:string?}}
|-valign="top"
| '''Summary'''
|Returns the parent directory of the static base URI. <br/>If the Base static base URI property is undefinedor does not point to a local resource, it returns the empty sequence is returned. - If a static base URI exists, and if points to a local file pathOtherwise, this function it returns the same result as the expression {{Code|file:parent(static-base-uri())}}.
|}
! width="160"|Code
|Description
|-valign="top"|{{Code|not-foundexists}}|A specified file with the same path does not existalready exists.|-valign="top"
|{{Code|invalid-path}}
|A specified path is invalid.
|-valign="top"|{{Code|exists}}|A file with the same path already exists.|-|{{Code|noio-direrror}}|The specified path does not point operation fails for some other reason specific to a directorythe operating system.|-valign="top"
|{{Code|is-dir}}
|The specified path is a directory.
|-valign="top"
|{{Code|is-relative}}
|The specified path is relative (and must be absolute).
|-valign="top"|{{Code|no-dir}}|The specified path does not point to a directory.|- valign="top"|{{Code|not-found}}|A specified path does not exist.|- valign="top"|{{Code|out-of-range}}|The specified offset or length is negative, or the chosen values would exceed the file bounds.|- valign="top"
|{{Code|unknown-encoding}}
|The specified encoding is not supported, or unknown.
|-
|{{Code|out-of-range}}
|The specified offset or length is negative, or the chosen values would exceed the file bounds.
|-
|{{Code|io-error}}
|The operation fails for some other reason specific to the operating system.
|}
=Changelog=
 
;Version 9.3
* Added: {{Function||file:descendants}}
 
;Version 9.0
* Updated: {{Function||file:read-text-lines}}: <code>$offset</code> and <code>$length</code> arguments added.
;Version 8.5
* Updated: [[#file:read-text{{Function||file:read-text]]}}, [[#file:read-text-lines{{Function||file:read-text-lines]]}}: <code>$fallback</code> argument added.
;Version 8.2
* Added: [[#file:is-absolute{{Function||file:is-absolute]]}}* Updated: [[#file:resolve-path{{Function||file:resolve-path]]}}: base argument added
;Version 8.0
* Added: [[#file:current-dir{{Function||file:current-dir]]}}, [[#file:base-dir{{Function||file:base-dir]]}}, [[#file:children{{Function||file:children]]}}
;Version 7.8
* Added: [[#file:parent{{Function||file:parent]]}}, [[#file:name{{Function||file:name]]}}* Updated: error codes; [[#file:read-binary{{Function||file:read-binary]]}}, [[#file:write-binary{{Function||file:write-binary]]}}: {{Code|$offset}} and {{Code|$length}} arguments added.
* Deleted: file:base-name, file:dir-name
;Version 7.7
* Added: [[#file:create-temp-dir{{Function||file:create-temp-dir]]}}, [[#file:create-temp-file{{Function||file:create-temp-file]]}}, [[#file:temp-dir{{Function||file:temp-dir]]}}
* Updated: all returned strings that refer to existing directories will be suffixed with a directory separator.
;Version 7.3
* Added: [[#file:append-text{{Function||file:append-text]]}}, [[#file:write-text{{Function||file:write-text]]}}, [[#file:append-text-lines{{Function||file:append-text-lines]]}}, [[#file:write-text-lines{{Function||file:write-text-lines]]}}, [[#file:line-separator{{Function||file:line-separator]]}}* Aligned with latest specification: $file:directory-separator → [[#file:dir-separator{{Function||file:dir-separator]]}}, $file:path-separator → [[#file:path-separator{{Function||file:path-separator]]}}, file:is-directory → [[#file:is-dir{{Function||file:is-dir]]}}, file:create-directory → [[#file:create-dir{{Function||file:create-dir]]}}* Updated: [[#file:write-binary{{Function||file:write-binary]]}}, [[#file:append-binary{{Function||file:append-binary]]}}: output limited to a single value
;Version 7.2.1
* Updated: [[#file:delete{{Function||file:delete]]}}: {{Code|$recursive}} parameter added to prevent sub-directories subdirectories from being accidentally deleted.* Fixed: [[#file:list{{Function||file:list]] }} now returns relative instead of absolute paths.
Bureaucrats, editor, reviewer, Administrators
13,550

edits

Navigation menu