compatibility/compatibility-lib/mzlib/file.rkt
2014-12-02 09:43:08 -05:00

57 lines
1.5 KiB
Racket

(module file racket/base
(require racket/file
racket/path
(prefix-in mz: (only-in mzscheme
open-input-file
open-output-file)))
(provide find-relative-path
explode-path
normalize-path
build-absolute-path
build-relative-path
filename-extension
file-name-from-path
path-only
delete-directory/files
copy-directory/files
make-directory*
make-temporary-file
find-library
get-preference
put-preferences
(rename-out [-call-with-input-file* call-with-input-file*]
[-call-with-output-file* call-with-output-file*])
fold-files
find-files
pathlist-closure)
(define (build-relative-path p . args)
(if (relative-path? p)
(apply build-path p args)
(error 'build-relative-path "base path ~s is absolute" p)))
(define (build-absolute-path p . args)
(if (relative-path? p)
(error 'build-absolute-path "base path ~s is relative" p)
(apply build-path p args)))
(define (find-library name . cp)
(apply collection-file-path name cp))
(define (-call-with-input-file* file thunk . flags)
(let ([p (apply mz:open-input-file file flags)])
(dynamic-wind
void
(lambda () (thunk p))
(lambda () (close-input-port p)))))
(define (-call-with-output-file* file thunk . flags)
(let ([p (apply mz:open-output-file file flags)])
(dynamic-wind
void
(lambda () (thunk p))
(lambda () (close-output-port p))))))