Книга: Practical Common Lisp
Two Representations of Directory Names
Two Representations of Directory Names
When dealing with pathnames that name directories, you need to be aware of one wrinkle. Pathnames separate the directory and name components, but Unix and Windows consider directories just another kind of file. Thus, on those systems, every directory has two different pathname representations.
One representation, which I'll call file form, treats a directory like any other file and puts the last element of the namestring into the name and type components. The other representation, directory form, places all the elements of the name in the directory component, leaving the name and type components NIL
. If /foo/bar/
is a directory, then both of the following pathnames name it.
(make-pathname :directory '(:absolute "foo") :name "bar") ; file form
(make-pathname :directory '(:absolute "foo" "bar")) ; directory form
When you create pathnames with MAKE-PATHNAME
, you can control which form you get, but you need to be careful when dealing with namestrings. All current implementations create file form pathnames unless the namestring ends with a path separator. But you can't rely on user-supplied namestrings necessarily being in one form or another. For instance, suppose you've prompted the user for a directory to save a file in and they entered "/home/peter"
. If you pass that value as the :defaults
argument of MAKE-PATHNAME
like this:
(make-pathname :name "foo" :type "txt" :defaults user-supplied-name)
you'll end up saving the file in /home/foo.txt
rather than the intended /home/peter/foo.txt
because the "peter"
in the namestring will be placed in the name component when user-supplied-name
is converted to a pathname. In the pathname portability library I'll discuss in the next chapter, you'll write a function called pathname-as-directory
that converts a pathname to directory form. With that function you can reliably save the file in the directory indicated by the user.
(make-pathname
:name "foo" :type "txt" :defaults (pathname-as-directory user-supplied-name))
- Безопасность внешних таблиц. Параметр EXTERNAL FILE DIRECTORY
- ТМР DIRECTORY
- EXTERNAL FUNCTION DIRECTORY
- namespace-uri()
- 5.1.2. The Directory Server Interface
- Part Two - Regulation By Code
- CHAPTER 14 Networking
- Installing Using a Network
- Network Configuration
- Configuring Wireless Networks
- Usenet Network Newsgroups
- Directory Permissions