00001
00011 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
00012 #pragma once
00013 #endif
00014 #ifndef COMMON_FILES_H_
00015 #define COMMON_FILES_H_
00016
00017 #include "Stream.hpp"
00018
00019
00020 namespace common
00021 {
00022
00023 struct DATETIME;
00024
00029
00031 enum FILE_ITEM_TYPE
00032 {
00033 IT_NONE,
00034 IT_DIR,
00035 IT_FILE,
00036 };
00037
00039 enum FILE_MODE
00040 {
00045 FM_WRITE,
00050 FM_WRITE_PLUS,
00055 FM_READ,
00060 FM_READ_PLUS,
00065 FM_APPEND,
00070 FM_APPEND_PLUS,
00071 };
00072
00074 class File_pimpl;
00075
00077 class FileStream : public SeekableStream
00078 {
00079 private:
00080 scoped_ptr<File_pimpl> pimpl;
00081
00082 public:
00083 FileStream(const tstring &FileName, FILE_MODE FileMode, bool Lock = true);
00084 virtual ~FileStream();
00085
00086 virtual void Write(const void *Data, size_t Size);
00087 virtual size_t Read(void *Data, size_t Size);
00088 virtual void Flush();
00089 virtual size_t GetSize();
00090 virtual int GetPos();
00091 virtual void SetPos(int pos);
00092 virtual void SetPosFromCurrent(int pos);
00093 virtual void SetPosFromEnd(int pos);
00094 virtual void SetSize(size_t Size);
00095 virtual void Truncate();
00096 virtual bool End();
00097 };
00098
00100 class DirLister_pimpl;
00101
00103
00105 class DirLister
00106 {
00107 private:
00108 scoped_ptr<DirLister_pimpl> pimpl;
00109
00110 public:
00111 DirLister(const tstring &Dir);
00112 ~DirLister();
00113
00115
00118 bool ReadNext(tstring *OutName, FILE_ITEM_TYPE *OutType);
00119 };
00120
00121
00123 void SaveStringToFile(const tstring &FileName, const string &Data);
00125 void SaveDataToFile(const tstring &FileName, const void *Data, size_t NumBytes);
00127 void LoadStringFromFile(const tstring &FileName, string *Data);
00129 #ifdef WIN32
00130 void SaveStringToFile(const tstring &FileName, const wstring &Data);
00131 void LoadStringFromFile(const tstring &FileName, wstring *Data);
00132 #endif
00133
00135
00137 bool GetFileItemInfo(const tstring &Path, FILE_ITEM_TYPE *OutType, uint *OutSize, DATETIME *OutModificationTime, DATETIME *OutCreationTime = NULL, DATETIME *OutAccessTime = NULL);
00138 void MustGetFileItemInfo(const tstring &Path, FILE_ITEM_TYPE *OutType, uint *OutSize, DATETIME *OutModificationTime, DATETIME *OutCreationTime = NULL, DATETIME *OutAccessTime = NULL);
00140
00141 FILE_ITEM_TYPE GetFileItemType(const tstring &Path);
00142
00144 bool UpdateFileTimeToNow(const tstring &FileName);
00145 void MustUpdateFileTimeToNow(const tstring &FileName);
00147 bool UpdateFileTime(const tstring &FileName, const DATETIME &ModificationTime, const DATETIME &AccessTime);
00148 void MustUpdateFileTime(const tstring &FileName, const DATETIME &ModificationTime, const DATETIME &AccessTime);
00149
00151 bool CreateDirectory(const tstring &Path);
00152 void MustCreateDirectory(const tstring &Path);
00154
00155 bool DeleteDirectory(const tstring &Path);
00156 void MustDeleteDirectory(const tstring &Path);
00158 bool CreateDirectoryChain(const tstring &Path);
00159 void MustCreateDirectoryChain(const tstring &Path);
00160
00162 bool DeleteFile(const tstring &FileName);
00163 void MustDeleteFile(const tstring &FileName);
00165
00166 bool MoveItem(const tstring &OldPath, const tstring &NewPath);
00167 void MustMoveItem(const tstring &OldPath, const tstring &NewPath);
00168
00169
00170 #ifdef WIN32
00171
00173 enum FILE_ENCODING
00174 {
00177 FILE_ENCODING_UTF16_LE = 1,
00178 FILE_ENCODING_UTF8 = 2,
00179 FILE_ENCODING_ANSI = 3,
00180
00181
00184
00185 FILE_ENCODING_FORCE_BOM = 0x00010000,
00187 FILE_ENCODING_NO_BOM = 0x00020000,
00189 FILE_ENCODING_AUTODETECT = 0x00040000,
00191 };
00192
00194
00196 void SaveUnicodeToFile(const tstring &FileName, const wstring &Data, unsigned Encoding);
00197 void SaveUnicodeToFile(const tstring &FileName, const wchar_t *Data, unsigned NumChars, unsigned Encoding);
00198
00199 void SaveUnicodeToStream(Stream *Dest, const wstring &Data, unsigned Encoding);
00200 void SaveUnicodeToStream(Stream *Dest, const wchar_t *Data, unsigned NumChars, unsigned Encoding);
00201
00203
00210 void LoadUnicodeFromFile(const tstring &FileName, wstring *Out, unsigned Encoding, FILE_ENCODING *OutEncoding = NULL);
00212
00213 void LoadUnicodeFromFile(const tstring &FileName, string *Out, unsigned Encoding, FILE_ENCODING *OutEncoding = NULL);
00214
00215 void LoadUnicodeFromStream(SeekableStream *Src, wstring *Out, unsigned Encoding, FILE_ENCODING *OutEncoding = NULL);
00216 void LoadUnicodeFromStream(SeekableStream *Src, string *Out, unsigned Encoding, FILE_ENCODING *OutEncoding = NULL);
00217
00218 #endif
00219
00221
00222
00223 }
00224
00225 #endif