On this page:

12 File and path utilities

 (require (planet untyped/unlib/file))

Utilities for manipulating files and paths.

(path-contains? path1 path2)  boolean?
  path1 : path?
  path2 : path?

Determines whether path2 is a subpath of path1.


  > (path-contains? (build-path "/a/b/c")
                    (build-path "/a/b/c/d"))


  > (path-contains? (build-path "/a/b/c/d")
                    (build-path "/a/b/c"))


  > (path-contains? (build-path "/a/b/c")
                    (build-path "/a/b/c/d/../../d"))


  > (path-contains? (build-path "/a/b/c")
                    (build-path "/a/b/c/d/../../c/d"))


(make-directory-tree tree)  void?
  tree : folders-spec

Creates a directory tree in the current directory that matches tree, which is a tree of strings of type folders-spec:

folders-spec ::= (listof folder-spec)
folder-spec  ::= string folders-spec

tree-spec For example, the code:

  (make-directory-tree '("a" ("b" "c" ("d"))))

would create the directory tree:


Any existing directories in the tree are left intact.

(make-non-conflicting-filename path    
  filename)  string?
  path : (U path? string?)
  filename : string?

Returns a filename that is guaranteed to not conflict with the names of any files in path. For example:

  (make-non-conflicting-filename (string->path "mydir") "myfile.txt")

would return:

(make-non-conflicting-path path filename)  path?
  path : (U path? string?)
  filename : string?

Like make-non-conflicting-filename but returns:

  (build-path path (make-non-conflicting-filename path filename))

(read-file->string file)  string?
  file : (U path? string?)

Reads the contents of file into a string. See the port.plt collection on PLaneT for more advanced functions along these lines.

(concatenate-files dest sources)  void?
  dest : (U path? string?)
  sources : (listof (U path? string?))

Concatenates (appends) the contents of sources and writes the result to dest.

(directory-tree path    
  [#:order order    
  #:filter filter    
  #:follow-links? follow-links?])  (listof path?)
  path : (U path? string?)
  order : (U 'pre 'post) = 'pre
  filter : (path? -> boolean?) = (lambda (path) #t)
  follow-links? : boolean? = #t

Returns a list of absolute paths of all matching files/directories/links in path or subdirectories thereof.

The order argument specifies whether the directory tree should be traversed in pre- or post-order; the filter argument specifies a predicate which returned results much match; the follow-links? argument specifies whether links to directories should be treated as directories or atomic files.

(in-directory path    
  [#:order order    
  #:filter filter    
  #:follow-links? follow-links?])  sequence?
  path : (U path? string?)
  order : (U 'pre 'post) = 'pre
  filter : (path? -> boolean?) = (lambda (path) #t)
  follow-links? : boolean? = #t

A wrapper for directory-tree that returns a sequence that is compatible with for and its equivalents.