Windows Directory Management 1








A directory is a hierarchical collection of directories and files. The only constraint on the number of files that can be contained in a single directory is the physical size of the disk on which the directory is located. A directory that contains one or more directories is the parent of the contained directory or directories, and each contained directory is a child of the parent directory. The hierarchical structure of directories is referred to as a directory tree. The NTFS file system implements the logical link between a directory and the files it contains as a directory entry table. When a file is moved into a directory, an entry is created in the table for the moved file and the name of the file is placed in the entry. When a file contained in a directory is deleted, the name and entry corresponding to the deleted file is also deleted from the table. More than one entry for a single file can exist in a directory entry table. If an additional entry is created in the table for a file, that entry is referred to as a hard link to that file. There is no limit to the number of hard links that can be created for a single file. Directories can also contain junctions and reparse points.


Creating and Deleting Directories


An application can programmatically create and delete directories. To create a new directory, use the CreateDirectory(), CreateDirectoryEx(), or CreateDirectoryTransacted() function. A directory is given the name specified when it is created. The conventions for naming a directory follow the conventions for naming a file. To delete an existing directory, use the RemoveDirectory() or RemoveDirectoryTransacted() function. Before removing a directory, you must ensure that the directory is empty and that you have the delete access privilege for the directory. To do the latter, call the GetSecurityInfo() function.


Directory Handles


Whenever a process creates or opens a directory object, it receives a handle to the object. To obtain a handle to an existing directory, call the CreateFile() function with the FILE_FLAG_BACKUP_SEMANTICS flag. You can pass a directory handle to the following functions:

  1. BackupRead() - The BackupRead() function can be used to back up a file or directory, including the security information. The function reads data associated with a specified file or directory into a buffer, which can then be written to the backup medium using the WriteFile() function.
  2. BackupSeek() - The BackupSeek() function seeks forward in a data stream initially accessed by using the BackupRead() or BackupWrite() function.
  3. BackupWrite() - The BackupWrite function can be used to restore a file or directory that was backed up using BackupRead(). Use the ReadFile() function to get a stream of data from the backup medium, and then use BackupWrite() to write the data to the specified file or directory.
  4. GetFileInformationByHandle() - Retrieves file information for the specified file. For a more advanced version of this function, use GetFileInformationByHandleEx(). To set file information using a file handle, use SetFileInformationByHandle().
  5. GetFileSize() - Retrieves the size of the specified file, in bytes. It is recommended that you use GetFileSizeEx().
  6. GetFileTime() - Retrieves the date and time that a file or directory was created, last accessed, and last modified.
  7. GetFileType() - Retrieves the file type of the specified file.
  8. ReadDirectoryChangesW() - Retrieves information that describes the changes within the specified directory. The function does not report changes to the specified directory itself.
  9. SetFileTime() - Sets the date and time that the specified file or directory was created, last accessed, or last modified.





< Windows Directory Index | Win32 Programming | Windows Directory 2 >