The function get-folder-path
obtains the current value for various special folders often used by applications. It is useful because these paths may differ between versions of the operating system. get-folder-path
is implemented all platforms, using system APIs on Microsoft Windows, Mac OS X and Android.
On platforms other than Windows, Mac OS X and Android it is a dummy function, which makes a path to a directory inside the user's home directory that looks like <homedir>/get-folder-path/<symbol-name-downcased>
. This allows testing code that uses get-folder-path
to work in the sense that files can be written and read from these directories.
what indicates the purpose of the special folder. For instance, :common-appdata
means the folder containing application data for all users.
The following values of what are recognized on Microsoft Windows and Mac OS X:
:appdata
, :documents
, :my-documents
, :common-appdata
, :common-documents
and :local-appdata
.
:documents
is an alias for :my-documents
.
The following values are recognized on Microsoft Windows only: :program-files
, :programs
and :common-programs
.
The following values are recognized on Mac OS X only:
:my-library
, :my-appsupport
, :my-preferences
, :my-caches
, :my-logs
, :common-library
, :common-appsupport
, :common-preferences
, :common-caches
, :common-logs
, :system-library
.
On Mac OS X, :appdata
is an alias for :my-appsupport
, :common-appdata
is an alias for :common-appsupport
, and :local-appdata
is an alias for :common-appsupport
.
If the folder does not exist and create is true, the folder is created. If the folder does not exist and create is false, result is nil
. The default value of create is false.
The following values of what are recognized on Android:
Both of these return the same directory. It is the directory which is returned by the getFilesDir
on the application context. Note that this is a private directory, not visible to other applications.
On Android 4.4 and later this returns the "documents" directory in the "public external" directory (the result of calling "android.os.Environment.getExternalStoragePublicDirectory"
with the value of android.os.Environment.DIRECTORY_DOCUMENTS
). In previous versions it uses the "downloads" directory, because there does not seem to be another useful place for it.
Note:
This is used as the home directory on Android, that is what cl:user-homedir-pathname
returns.
:alarms
, :dcim
, :downloads
, :movies
, :music
, :notifications
, :pictures
, :podcasts
, :ringtones
Return the matching directory in the "public external" directory. This is the result of calling "android.os.Environment.getExternalStoragePublicDirectory"
with the value of android.os.Environment.DIRECTORY_<symbol-name>
, where symbol-name
is the symbol name of the keyword), for example android.os.Environment.DIRECTORY_RINGTONES
.
Returns the external storage directory of the application if it is accessible, otherwise returns nil
. The external storage directory is the result of calling getExternalFilesDir
on the application context with null
.
Note that the application will need permission to access the external storage, by having uses-permission android.permission.WRITE_EXTERNAL_STORAGE
or android.permission.READ_EXTERNAL_STORAGE
in the AndroidManifest.xml
file.
This form constructs a pathname to a file foo.lisp
in the user's documents directory:
(make-pathname
:name "foo"
:type "lisp"
:defaults
(sys:get-folder-path :my-documents))
LispWorks User Guide and Reference Manual - 20 Sep 2017