Next: ReadFileStream, Up: Classes [Index]
DirectoryStream
ClassThe DirectoryStream
class contains methods
for creating and deleting directories, and for reading
files in directories.
On machines which have library support for file globbing,
DirectoryStream
provides methods that read directories and
files that match patterns which contain metacharacters like ‘*’,
‘?’, and ‘[’. This is in addition to whatever file pattern
expansion the shell performs on file patterns provided on the command
line. See below for more details.
If a command provides a file specification that contains a metacharacter,
often the shell expands the pattern into a list of files that the
program receives in the function main's
argv
array.
If the command line provides a quoted metacharacter as one of the
program’s arguments, however, the program can use the
DirectoryStream
methods globPattern
and globCwd
to
expand the pattern into a list of filenames.
$ myfileprog some_arg * # The shell expands '*' into a list of files. $ myfileprog some_arg '*' # The shell adds a literal '*' to the app's # arguments.
Not all shells provide metacharacter expansion before the program
executes main
, however, and so the app should check for
metacharacters as arguments also. The following example shows one way
to do this.
List new fileNames; String instanceMethod globFile (void) { DirectoryStream new d; List new globFiles; if (d hasMeta self) { /* The argv entry contains a wildcard character. */ d globPattern self, globFiles; globFiles map { fileNames push self; } } else { /* The argv entry is an unambiguous file name. */ fileNames push self; } } int main (int argc, char *argv[]) { int i; for (i = 1; i < argc; ++i) { argv[i] globFile; } fileNames map { printf ("%s\n", self); } }
The default mode for new directories is 0755
(‘drwxr-xr-x’) modified by the user’s UMASK
. Programs can
change the default directory permissions by redefining the macro
CTALK_DIRECTORY_MODE
.
The methods chDir
, mkDir
, and rmDir
raise a
SystemErrnoException
on error and return an Integer
with
the value -1
.
chDir (char *
dir)
Change to the directory dir.
directoryList (char *
dirname, List
dirlist)
List directory dirname, and store it in the List
dirlist.
The order of the elements in the list depends on the operating system.
To expressly create a sorted directory listing, see the
sortedDirectoryList
method.
getCwd (void
)
Return the current directory as a String
object.
globPattern (String
file_name_pattern, List
matching_file_names)
Adds the file names that match file_name_pattern to matching_file_names. This method uses the machine’s glob library call, if it is available, to do the pattern matching. If the system doesn’t support filename pattern matching in its C library, the method prints a warning message and returns. For more information about how the machine expands file globbing patterns into file names, refer to the glob(3) and glob(7) manual pages.
hasMeta (String
file_name_pattern)
Returns a Boolean
value of True if file_name_pattern
contains one of the opening metacharacters ‘*’, ‘?’,
or ‘[’, False otherwise.
mkDir (char *
directoryname)
Create the directory directoryname.
rmDir (char *
directoryname)
Delete the directory directoryname.
sortedDirectoryList (char *
dirname, SortedList
dirlist)
List directory dirname, and store it in the SortedList
dirlist.
The members of the directory listing are stored in ascending order.
Next: ReadFileStream, Up: Classes [Index]