00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277 #ifndef INC_MI32_FILEPATH_H
00278 #define INC_MI32_FILEPATH_H
00279
00280 #ifndef INC_MI32_MISTRING_H
00281 #include <mi32/mistring.h>
00282 #endif
00283
00284 #ifndef INC_TIME_H
00285 #include <time.h>
00286 #define INC_TIME_H
00287 #endif
00288
00289 #ifdef MISYSTEMDLL
00290 #define CLASSLIBEXPORT MI_DLLCLASSEXPORT
00291 #else
00292 #define CLASSLIBEXPORT MI_DLLCLASSIMPORT
00293 #endif
00294
00295 #ifndef GENERATING_DOXYGEN_OUTPUT
00296
00297 class FILE_RAW;
00298 class MISTATUSMANAGER;
00299 #endif // GENERATING_DOXYGEN_OUTPUT
00300
00301
00303 class CLASSLIBEXPORT FILEPATH {
00304 public:
00305
00307 enum PERMISSION {
00308 PERMISSION_Invalid = 0,
00309 PERMISSION_Exists = 1,
00310 PERMISSION_Read = 2,
00311 PERMISSION_Write = 3,
00312 PERMISSION_ReadWrite = 4,
00313 PERMISSION_Execute = 5,
00314 PERMISSION_AddChild = 6
00315 };
00316
00318 enum FILESYSTYPE {
00319 FILESYSTYPE_Unknown,
00320 FILESYSTYPE_NoRootDir,
00321 FILESYSTYPE_Removable,
00322 FILESYSTYPE_Fixed,
00323 FILESYSTYPE_Network,
00324 FILESYSTYPE_CDROM,
00325 FILESYSTYPE_RamDisk,
00326 };
00327
00329 enum PATHTYPE {
00330 PATHTYPE_Current = 0,
00331 PATHTYPE_Home = 1,
00332 PATHTYPE_ExecutableFile = 2,
00333 PATHTYPE_Desktop = 3,
00334 PATHTYPE_Font = 4,
00335 #if defined(WIN32)
00336 PATHTYPE_Windows = 5,
00337 PATHTYPE_WindowsSystem = 6,
00338 #endif
00339 PATHTYPE_InstallationFolder = 7,
00340 PATHTYPE_ExecutableFolder = 8,
00341 PATHTYPE_Documents_AllUsers = 9,
00342 PATHTYPE_MicroImages_Shared = 10,
00343 PATHTYPE_Documents_CurrentUser = 11,
00344 PATHTYPE_MicroImages_User = 12,
00345 PATHTYPE_Settings_CurInst_CurUser = 13,
00346 PATHTYPE_Settings_CurInst_AllUsers = 14,
00347 PATHTYPE_Settings_AllInst_CurUser = 15,
00348 PATHTYPE_Settings_AllInst_AllUsers = 16,
00349 PATHTYPE_MicroImages_Logs = 17,
00350 PATHTYPE_AppData_MicroImages_CurUser = 18,
00351 PATHTYPE_AppData_MicroImages_AllUsers = 19,
00352 PATHTYPE_MicroImages_CurInst_Doc = 20,
00353 };
00354
00355 enum RELATIVEPATH {
00356 RELATIVEPATH_Default = 0x00,
00357 RELATIVEPATH_NoEncoding = 0x01,
00358 RELATIVEPATH_NoDotSlashPrefix = 0x02,
00359 };
00360
00362 enum CHILDTYPE {
00363 CHILDTYPE_Directory = 1,
00364 CHILDTYPE_File
00365 };
00366
00369 static MISTRING ConvertDisplayToName (
00370 const MISTRING& name
00371 );
00372
00375 static MISTRING ConvertNameToDisplay (
00376 const MISTRING& name
00377 );
00378
00380 static int GetDriveList (
00381 MISTRINGLIST& DriveList
00382 );
00383
00385 static bool GetEnvPath (
00386 const char *name,
00387 MISTRING& EnvPathStr
00388 );
00389
00392 static const MISTRING& GetNonValidComponentChars (
00393 );
00394
00413 static bool IsRelativePath (
00414 const MISTRING& path
00415 );
00416
00418 static bool IsRelativePath (
00419 const MIUNICODE *path
00420 );
00421
00424 static bool IsValidName (
00425 const MISTRING& name
00426 );
00427
00431 static bool MakeValidChars (
00432 MISTRING& name
00433 );
00434
00437 static bool MakeValidName (
00438 MISTRING& name
00439 );
00440
00443 static void SetModuleFileName (
00444 const char *name,
00445 CHAR_ENCODING encoding
00446 );
00447
00449 FILEPATH (
00450 ) { }
00451
00453 FILEPATH (
00454 const FILEPATH& rhs
00455 ): m_pathstr(rhs.m_pathstr) { }
00456
00458 FILEPATH (
00459 const FILEPATH& dir,
00460 const MISTRING& name
00461 );
00462
00464 FILEPATH (
00465 const FILEPATH& dir,
00466 const MIUNICODE *name
00467 );
00468
00470 FILEPATH (
00471 const FILEPATH& dir,
00472 const char *name,
00473 CHAR_ENCODING encoding = CHAR_ENCODING_ASCII
00474 );
00475
00477 explicit FILEPATH (
00478 PATHTYPE type
00479 );
00480
00482 explicit FILEPATH (
00483 const MISTRING& rhs
00484 );
00485
00487 FILEPATH (
00488 const MIUNICODE *rhs
00489 );
00490
00492 explicit FILEPATH (
00493 const char *rhs,
00494 CHAR_ENCODING encoding = CHAR_ENCODING_ASCII
00495 );
00496
00498 FILEPATH (
00499 void *IniHandle,
00500 const char *group,
00501 const char *field
00502 );
00503
00505 ~FILEPATH (
00506 ) { }
00507
00509 FILEPATH& operator= (
00510 const FILEPATH& rhs
00511 ) { if (this != &rhs) m_pathstr = rhs.m_pathstr; return (*this); }
00512
00514 FILEPATH& operator= (
00515 const MISTRING& rhs
00516 );
00517
00519 FILEPATH& operator= (
00520 const MIUNICODE* rhs
00521 );
00522
00524 FILEPATH& operator+= (
00525 const MISTRING& rhs
00526 );
00527
00529 FILEPATH& operator+= (
00530 const MIUNICODE* rhs
00531 );
00532
00534 FILEPATH& operator+= (
00535 const char *rhs
00536 );
00537
00539 FILEPATH& Append (
00540 const char *q,
00541 CHAR_ENCODING encoding
00542 );
00543
00546 FILEPATH& Assign (
00547 const char *p,
00548 CHAR_ENCODING encoding = CHAR_ENCODING_ASCII
00549 );
00550
00553 ERRVALUE CheckAccess (
00554 const PERMISSION perm = PERMISSION_Read
00555 ) const;
00556
00558 void Clear (
00559 );
00560
00562 bool Contains (
00563 const FILEPATH& SubPath
00564 ) const;
00565
00568 ERRVALUE CopyFileFrom (
00569 const FILEPATH& SourcePath,
00570 bool ShowStatus = false
00571 ) const;
00572
00576 void CopyFileFromDetached (
00577 const FILEPATH& SourcePath,
00578 MISTATUSMANAGER* DftManager = 0
00579 ) const;
00580
00582 bool Exists (
00583 ) const;
00584
00587 ERRVALUE GenerateTempFile (
00588 const FILEPATH& BasePath,
00589 const MISTRING& Basename,
00590 const char* extn = "tmp"
00591 );
00592
00600 char* GenerateEncodedOSPath (
00601 ) const;
00602
00604 INT64 GetAvailableSpace (
00605 ) const;
00606
00609 int GetChildren (
00610 MISTRINGLIST& ChildList,
00611 CHILDTYPE ChildType
00612 ) const;
00613
00616 int GetChildren (
00617 MISTRINGLIST& ChildList,
00618 const MISTRING& pattern,
00619 CHILDTYPE ChildType
00620 ) const;
00621
00623 int GetComponents (
00624 MISTRINGLIST& CompList
00625 ) const;
00626
00629 MISTRING GetDisplay (
00630 ) const;
00631
00636 MISTRING GetEncoded (
00637 ) const;
00638
00642 MISTRING GetExtension (
00643 ) const;
00644
00647 FILESYSTYPE GetFileSysType (
00648 ) const;
00649
00652 UINT32 GetFullPathSizeLimit (
00653 ) const;
00654
00655 #if defined(MAC_OSX)
00657 ERRVALUE GetMacFileType (
00658 char *creator,
00659 char *type
00660 ) const;
00661 #endif
00662
00665 MISTRING GetName (
00666 ) const;
00667
00671 MISTRING GetNameOnly (
00672 ) const;
00673
00676 UINT32 GetNameSizeLimit (
00677 ) const;
00678
00681 INT32 GetOptimalTransferSize (
00682 ) const;
00683
00688 MISTRING GetOSPath (
00689 ) const;
00690
00692 FILEPATH GetPathOnly (
00693 ) const;
00694
00696 PERMISSION GetPermission (
00697 ) const;
00698
00702 MISTRING GetQuotedPath (
00703 ) const;
00704
00714 MISTRING GetRelativePath (
00715 const FILEPATH& BasePath
00716 ) const;
00717
00721 MISTRING GetRelativePath (
00722 const FILEPATH& BasePath,
00723 RELATIVEPATH flags,
00724 int maxoutlevels = -1,
00725 char separator = 0
00726 ) const;
00727
00729 INT64 GetSize (
00730 ) const;
00731
00733 INT64 GetSystemMaxSize (
00734 ) const;
00735
00737 ERRVALUE GetTimeAccessed (
00738 time_t *rettime
00739 ) const;
00740
00742 ERRVALUE GetTimeCreated (
00743 time_t *rettime
00744 ) const;
00745
00747 ERRVALUE GetTimeModified (
00748 time_t *rettime
00749 ) const;
00750
00752 void GetVolumeName (
00753 MISTRING& VolumeName
00754 ) const;
00755
00756 #if defined(WIN32)
00759 bool GrantWriteAccessTo (
00760 const MISTRING& AccountName
00761 );
00762 #endif
00763
00766 bool HasChildren (
00767 CHILDTYPE ChildType
00768 ) const;
00769
00771 bool HasExtension (
00772 ) const;
00773
00776 bool IniRead (
00777 void *IniHandle,
00778 const char *group,
00779 const char *field
00780 );
00781
00783 void IniWrite (
00784 void *IniHandle,
00785 const char *group,
00786 const char *field
00787 ) const;
00788
00790 bool IsChildPath (
00791 const FILEPATH& BasePath
00792 ) const;
00793
00795 bool IsEmpty (
00796 ) const;
00797
00801 bool IsEqual (
00802 const FILEPATH& TestPath
00803 ) const;
00804
00806 bool IsFile (
00807 ) const;
00808
00810 bool IsFolder (
00811 ) const;
00812
00816 bool IsLessThan (
00817 const FILEPATH& TestPath
00818 ) const;
00819
00823 bool IsPathOnly (
00824 ) const;
00825
00827 bool IsReadable (
00828 ) const;
00829
00831 bool IsRootOnly (
00832 ) const;
00833
00838 bool IsSameExtn (
00839 const char *extn
00840 ) const;
00841
00846 bool IsSameExtn (
00847 const MISTRING& extn
00848 ) const;
00849
00850
00852 bool IsUNCHostOnly (
00853 ) const;
00854
00855
00857 bool IsUNCRoot (
00858 ) const;
00859
00863 bool IsWritable (
00864 ) const;
00865
00868 ERRVALUE Make (
00869 bool MakeTree = false
00870 ) const;
00871
00873 ERRVALUE MakeHardLinkTo (
00874 const FILEPATH& SrcFile
00875 ) const;
00876
00878 ERRVALUE Remove (
00879 ) const;
00880
00883 ERRVALUE RemoveFiles (
00884 bool RemoveReadOnlyFiles = false
00885 ) const;
00886
00888 ERRVALUE RemoveFolder (
00889 ) const;
00890
00892 ERRVALUE Rename (
00893 const MISTRING& newname
00894 );
00895
00897 ERRVALUE Rename (
00898 const FILEPATH& newname
00899 ) const;
00900
00902 FILEPATH& ReplaceRoot (
00903 const FILEPATH& SourcePath
00904 );
00905
00908 bool SearchCase (
00909 );
00910
00912 FILEPATH& SetExtension (
00913 const MISTRING& extn
00914 );
00915
00917 FILEPATH& SetExtension (
00918 const char* extn,
00919 CHAR_ENCODING encoding = CHAR_ENCODING_ASCII
00920 );
00921
00922 #if defined(MAC_OSX)
00924 ERRVALUE SetMacFileType (
00925 const char *creator,
00926 const char *type
00927 ) const;
00928 #endif
00929
00931 FILEPATH& SetName (
00932 const MISTRING& name
00933 );
00934
00936 FILEPATH& SetName (
00937 const char* name,
00938 CHAR_ENCODING encoding = CHAR_ENCODING_ASCII
00939 );
00940
00941 #if defined(WIN32)
00945 void SetOSPath (
00946 const char* path
00947 );
00948
00952 void SetOSPath (
00953 const MIUNICODE* path
00954 );
00955 #endif
00956
00958 ERRVALUE SetPermission (
00959 PERMISSION perm
00960 ) const;
00961
00963 void SetSystemPath (
00964 PATHTYPE pt
00965 );
00966
00968 ERRVALUE SetTimeCreated (
00969 const tm*const timeval
00970 ) const;
00971
00973 ERRVALUE SetTimeCreated (
00974 time_t value
00975 ) const;
00976
00978 ERRVALUE SetTimeModified (
00979 const tm*const timeval
00980 ) const;
00981
00983 ERRVALUE SetTimeModified (
00984 time_t value
00985 ) const;
00986
00988 FILEPATH& StripExtension (
00989 );
00990
00992 FILEPATH& StripLastComponent (
00993 );
00994
00996 FILEPATH& StripToExisting (
00997 );
00998
01002 bool StripToCommon (
01003 const FILEPATH& testpath
01004 );
01005
01007 FILEPATH& StripToFolder (
01008 );
01009
01011 FILEPATH& StripToRoot (
01012 );
01013
01016 ERRVALUE UpdateFilesFrom (
01017 const FILEPATH& SourcePath,
01018 bool RecurseSubDirectories = true
01019 ) const;
01020
01023 ERRVALUE UpdateFilesFrom (
01024 const FILEPATH& SourcePath,
01025 const MISTRING& pattern,
01026 bool RecurseSubDirectories = true
01027 ) const;
01028
01029 private:
01030 #ifndef GENERATING_DOXYGEN_OUTPUT
01031
01032 void AppendPath (const MISTRING& name);
01033 ERRVALUE GenerateErrorCode (ERRVALUE DftErrCode) const;
01034 char *GenerateOSPath () const;
01035 int GetExtnPosn () const;
01036 int GetRootEndPosn () const;
01037 void GetWindowsFolderPath (int folder);
01038 #ifdef WIN32
01039 bool GetWindowsVolumeInfo (
01040 MISTRING *pVolumeName,
01041 UINT32 *pSerialNum,
01042 UINT32 *pMaxComponentLength,
01043 UINT32 *pFlags,
01044 MISTRING *pFileSystemName
01045 ) const;
01046 #endif
01047 void JoinRelativePath (const MISTRING& str);
01048 ERRVALUE MakePath () const;
01049
01050 MISTRING m_pathstr;
01051
01052 static const MIUNICODE s_ExtnMark;
01053 static const MIUNICODE s_SepMark;
01054 static const MIUNICODE s_RelMark;
01055 static const char *s_BackTagStr;
01056 static const char *s_SameDirStr;
01057 static const char *s_EncodeStr;
01058 static MISTRING *s_argv0;
01059
01060 friend class FILE_RAW;
01061
01062 #endif // GENERATING_DOXYGEN_OUTPUT
01063 };
01064
01065 #ifndef GENERATING_DOXYGEN_OUTPUT
01066 DEFINE_ENUM_OP_BITWISE(FILEPATH::PERMISSION)
01067 DEFINE_ENUM_OP_BITWISE(FILEPATH::RELATIVEPATH)
01068 #endif
01069
01070
01072 inline bool operator== (
01073 const FILEPATH& p,
01074 const FILEPATH& q
01075 ) { return (p.IsEqual(q)); }
01076
01078 inline bool operator!= (
01079 const FILEPATH& p,
01080 const FILEPATH& q
01081 ) { return (!p.IsEqual(q)); }
01082
01084 inline bool operator< (
01085 const FILEPATH& p,
01086 const FILEPATH& q
01087 ) { return (p.IsLessThan(q)); }
01088
01090 inline bool operator> (
01091 const FILEPATH& p,
01092 const FILEPATH& q
01093 ) { return (!p.IsLessThan(q) && !p.IsEqual(q)); }
01094
01096 inline bool operator<= (
01097 const FILEPATH& p,
01098 const FILEPATH& q
01099 ) { return (p.IsLessThan(q) || p.IsEqual(q)); }
01100
01102 inline bool operator>= (
01103 const FILEPATH& p,
01104 const FILEPATH& q
01105 ) { return (!p.IsLessThan(q)); }
01106
01108 inline FILEPATH operator+ (
01109 const FILEPATH& q,
01110 const MISTRING& p
01111 ) {
01112 FILEPATH temp(q);
01113 return (temp += p);
01114 }
01115
01117 inline MISTRING& operator<< (
01118 MISTRING& lhs,
01119 const FILEPATH& rhs
01120 ) { return (lhs.operator<<(rhs.GetDisplay())); }
01121
01122
01123 #undef CLASSLIBEXPORT
01124
01125 #endif