filepath.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:11k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * filepath.h
  3.  *
  4.  * File system path string abstraction class.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: filepath.h,v $
  30.  * Revision 1.15  1999/03/09 02:59:49  robertj
  31.  * Changed comments to doc++ compatible documentation.
  32.  *
  33.  * Revision 1.14  1999/02/16 08:07:11  robertj
  34.  * MSVC 6.0 compatibility changes.
  35.  *
  36.  * Revision 1.13  1998/11/30 08:57:16  robertj
  37.  * Fixed problem where if += is used on PFilePath, it no longer may be normalised.
  38.  *
  39.  * Revision 1.12  1998/09/23 06:20:37  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.11  1998/02/16 00:14:57  robertj
  43.  * Added functions to validate characters in a filename.
  44.  *
  45.  * Revision 1.10  1995/07/31 12:03:37  robertj
  46.  * Added copy constructor and assignment operator for right types.
  47.  *
  48.  * Revision 1.9  1995/04/22 00:43:43  robertj
  49.  * Added Move() function and changed semantics of Rename().
  50.  * Changed all file name strings to PFilePath objects.
  51.  *
  52.  * Revision 1.8  1995/03/14 12:41:25  robertj
  53.  * Updated documentation to use HTML codes.
  54.  *
  55.  * Revision 1.7  1994/12/21  11:52:57  robertj
  56.  * Documentation and variable normalisation.
  57.  *
  58.  * Revision 1.6  1994/10/24  00:06:58  robertj
  59.  * Changed PFilePath and PDirectory so descends from either PString or
  60.  *     PCaselessString depending on the platform.
  61.  *
  62.  * Revision 1.5  1994/08/23  11:32:52  robertj
  63.  * Oops
  64.  *
  65.  * Revision 1.4  1994/08/22  00:46:48  robertj
  66.  * Added pragma fro GNU C++ compiler.
  67.  *
  68.  * Revision 1.3  1994/08/21  23:43:02  robertj
  69.  * Changed parameter before variable argument list to NOT be a reference.
  70.  *
  71.  * Revision 1.2  1994/06/25  11:55:15  robertj
  72.  * Unix version synchronisation.
  73.  *
  74.  * Revision 1.1  1994/04/20  12:17:44  robertj
  75.  * Initial revision
  76.  *
  77.  */
  78. #define _PFILEPATH
  79. #ifdef __GNUC__
  80. #pragma interface
  81. #endif
  82. #ifdef DOC_PLUS_PLUS
  83. /** Base string type for a file path.
  84.     For platforms where filenames are case significant (eg Unix) this class
  85.     is a synonym for #PString#. If it is for a platform where case is not
  86.     significant (eg Win32, Mac) then this is a synonym for #PCaselessString#.
  87.  */
  88. class PFilePathString : public PString { };
  89. #endif
  90. ///////////////////////////////////////////////////////////////////////////////
  91. // File Specification
  92. /**This class describes a full description for a file on the particular
  93.    platform. This will always uniquely identify the file on currently mounted
  94.    volumes.
  95.    The ancestor class is dependent on the platform. For file systems that are
  96.    case sensitive, eg Unix, the ancestor is #PString#. For other
  97.    platforms, the ancestor class is #PCaselessString#.
  98.  */
  99. class PFilePath : public PFilePathString
  100. {
  101.   PCLASSINFO(PFilePath, PFilePathString);
  102.   public:
  103.   /**@name Construction */
  104.   //@{
  105.     /**Create a file specification object.
  106.      */
  107.     PFilePath();
  108.     /**Create a file specification object with the specified file name.
  109.     
  110.        The string passed in may be a full or partial specification for a file
  111.        as determined by the platform. It is unusual for this to be a literal
  112.        string, unless only the file title is specified, as that would be
  113.        platform specific.
  114.        The partial file specification is translated into a canonical form
  115.        which always absolutely references the file.
  116.      */
  117.     PFilePath(
  118.       const char * cstr   /// Partial C string for file name.
  119.     );
  120.     /**Create a file specification object with the specified file name.
  121.     
  122.        The string passed in may be a full or partial specification for a file
  123.        as determined by the platform. It is unusual for this to be a literal
  124.        string, unless only the file title is specified, as that would be
  125.        platform specific.
  126.        The partial file specification is translated into a canonical form
  127.        which always absolutely references the file.
  128.      */
  129.     PFilePath(
  130.       const PString & str /// Partial PString for file name.
  131.     );
  132.     /**Create a file specification object with the specified file name.
  133.      */
  134.     PFilePath(
  135.       const PFilePath & path /// Previous path for file name.
  136.     );
  137.     /**Create a file spec object with a generated temporary name. The first
  138.        parameter is a prefix for the filename to which a unique number is
  139.        appended. The second parameter is the directory in which the file is to
  140.        be placed. If this is NULL a system standard directory is used.
  141.      */
  142.     PFilePath(
  143.       const char * prefix,  /// Prefix string for file title.
  144.       const char * dir      /// Directory in which to place the file.
  145.     );
  146.     /**Change the file specification object to the specified file name.
  147.        The string passed in may be a full or partial specifiaction for a file
  148.        as determined by the platform. It is unusual for this to be a literal
  149.        string, unless only the file title is specified, as that would be
  150.        platform specific.
  151.        The partial file specification is translated into a canonical form
  152.        which always absolutely references the file.
  153.      */
  154.     PFilePath & operator=(
  155.       const char * cstr /// Partial "C" string for file name.
  156.     );
  157.     /**Change the file specification object to the specified file name.
  158.        The string passed in may be a full or partial specifiaction for a file
  159.        as determined by the platform. It is unusual for this to be a literal
  160.        string, unless only the file title is specified, as that would be
  161.        platform specific.
  162.        The partial file specification is translated into a canonical form
  163.        which always absolutely references the file.
  164.      */
  165.     PFilePath & operator=(
  166.       const PString & str /// Partial PString for file name.
  167.     );
  168.     /**Change the file specification object to the specified file name.
  169.      */
  170.     PFilePath & operator=(
  171.       const PFilePath & path /// Previous path for file name.
  172.     );
  173.   //@}
  174.   /**@name Path addition functions */
  175.   //@{
  176.     /**Concatenate a string to the file path, modifiying that path.
  177.        @return
  178.        reference to string that was concatenated to.
  179.      */
  180.     PFilePath & operator+=(
  181.       const PString & str   /// String to concatenate.
  182.     );
  183.     /**Concatenate a C string to a path, modifiying that path. The
  184.        #cstr# parameter is typically a literal string, eg:
  185. begin{verbatim}
  186.         myStr += "fred";
  187. end{verbatim}
  188.        @return
  189.        reference to string that was concatenated to.
  190.      */
  191.     PFilePath & operator+=(
  192.       const char * cstr  /// C string to concatenate.
  193.     );
  194.     /**Concatenate a single character to a path. The #ch#
  195.        parameter is typically a literal, eg:
  196. begin{verbatim}
  197.         myStr += '!';
  198. end{verbatim}
  199.        @return
  200.        new string with concatenation of the object and parameter.
  201.      */
  202.     PFilePath & operator+=(
  203.       char ch   // Character to concatenate.
  204.     );
  205.   //@}
  206.   /**@name Path decoding access functions */
  207.   //@{
  208.     /**Get the drive/volume name component of the full file specification. This
  209.        is very platform specific. For example in DOS & NT it is the drive
  210.        letter followed by a colon ("C:"), for Macintosh it is the volume name
  211.        ("Untitled") and for Unix it is empty ("").
  212.        
  213.        @return
  214.        string for the volume name part of the file specification..
  215.      */
  216.     PFilePathString GetVolume() const;
  217.       
  218.     /**Get the directory path component of the full file specification. This
  219.        will include leading and trailing directory separators. For example
  220.        on DOS this could be "SRCPWLIB", for Macintosh ":Source:PwLib:" and
  221.        for Unix "/users/equivalence/src/pwlib/".
  222.        @return
  223.        string for the path part of the file specification.
  224.      */
  225.     PFilePathString GetPath() const;
  226.     /**Get the title component of the full file specification, eg for the DOS
  227.        file "C:SRCPWLIBFRED.DAT" this would be "FRED".
  228.        @return
  229.        string for the title part of the file specification.
  230.      */
  231.     PFilePathString GetTitle() const;
  232.     /**Get the file type of the file. Note that on some platforms this may
  233.        actually be part of the full name string. eg for DOS file
  234.        "C:SRCPWLIBFRED.TXT" this would be ".TXT" but on the Macintosh this
  235.        might be "TEXT".
  236.        Note there are standard translations from file extensions, eg ".TXT"
  237.        and some Macintosh file types, eg "TEXT".
  238.        @return
  239.        string for the type part of the file specification.
  240.      */
  241.     PFilePathString GetType() const;
  242.     /**Get the actual directory entry name component of the full file
  243.        specification. This may be identical to
  244.        #GetTitle() + GetType()# or simply #GetTitle()#
  245.        depending on the platform. eg for DOS file "C:SRCPWLIBFRED.TXT" this
  246.        would be "FRED.TXT".
  247.        @return
  248.        string for the file name part of the file specification.
  249.      */
  250.     PFilePathString GetFileName() const;
  251.     /**Get the the directory that the file is contained in.  This may be 
  252.        identical to #GetVolume() + GetPath()# depending on the 
  253.        platform. eg for DOS file "C:SRCPWLIBFRED.TXT" this would be 
  254.        "C:SRCPWLIB".
  255.        Note that for Unix platforms, this returns the {bf physical} path
  256.        of the directory. That is all symlinks are resolved. Thus the directory
  257.        returned may not be the same as the value of #GetPath()#.
  258.        @return
  259.        Directory that the file is contained in.
  260.      */
  261.     PDirectory GetDirectory() const;
  262.     /**Set the type component of the full file specification, eg for the DOS
  263.        file "C:SRCPWLIBFRED.DAT" would become "C:SRCPWLIBFRED.TXT".
  264.      */
  265.     void SetType(
  266.       const PFilePathString & type  /// New type of the file.
  267.     );
  268.   //@}
  269.   /**@name Miscellaneous functions */
  270.   //@{
  271.     /**Test if the character is valid in a filename.
  272.        @return
  273.        TRUE if the character is valid for a filename.
  274.      */
  275.     static BOOL IsValid(
  276.       char c    /// Character to test for validity.
  277.     );
  278.     /**Test if all the characters are valid in a filename.
  279.        @return
  280.        TRUE if the character is valid for a filename.
  281.      */
  282.     static BOOL IsValid(
  283.       const PString & str   /// String to test for validity.
  284.     );
  285.   //@}
  286. #ifdef DOC_PLUS_PLUS
  287. };
  288. #endif
  289. // Class declaration continued in platform specific header file ///////////////