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 #ifdef WIN32
00099 HANDLE GetNativeHandle();
00100 #endif
00101 };
00102
00104 class DirLister_pimpl;
00105
00107
00109 class DirLister
00110 {
00111 private:
00112 scoped_ptr<DirLister_pimpl> pimpl;
00113
00114 public:
00115 DirLister(const tstring &Dir);
00116 ~DirLister();
00117
00119
00122 bool ReadNext(tstring *OutName, FILE_ITEM_TYPE *OutType);
00123 };
00124
00125
00127 void SaveStringToFile(const tstring &FileName, const string &Data);
00129 void SaveDataToFile(const tstring &FileName, const void *Data, size_t NumBytes);
00131 void LoadStringFromFile(const tstring &FileName, string *Data);
00133 #ifdef WIN32
00134 void SaveStringToFile(const tstring &FileName, const wstring &Data);
00135 void LoadStringFromFile(const tstring &FileName, wstring *Data);
00136 #endif
00137
00139
00141 bool GetFileItemInfo(const tstring &Path, FILE_ITEM_TYPE *OutType, uint *OutSize, DATETIME *OutModificationTime, DATETIME *OutCreationTime = NULL, DATETIME *OutAccessTime = NULL);
00142 void MustGetFileItemInfo(const tstring &Path, FILE_ITEM_TYPE *OutType, uint *OutSize, DATETIME *OutModificationTime, DATETIME *OutCreationTime = NULL, DATETIME *OutAccessTime = NULL);
00144
00145 FILE_ITEM_TYPE GetFileItemType(const tstring &Path);
00146
00148 bool UpdateFileTimeToNow(const tstring &FileName);
00149 void MustUpdateFileTimeToNow(const tstring &FileName);
00151 bool UpdateFileTime(const tstring &FileName, const DATETIME &ModificationTime, const DATETIME &AccessTime);
00152 void MustUpdateFileTime(const tstring &FileName, const DATETIME &ModificationTime, const DATETIME &AccessTime);
00153
00155 bool CreateDirectory(const tstring &Path);
00156 void MustCreateDirectory(const tstring &Path);
00158
00159 bool DeleteDirectory(const tstring &Path);
00160 void MustDeleteDirectory(const tstring &Path);
00162 bool CreateDirectoryChain(const tstring &Path);
00163 void MustCreateDirectoryChain(const tstring &Path);
00164
00166 bool DeleteFile(const tstring &FileName);
00167 void MustDeleteFile(const tstring &FileName);
00169
00170 bool MoveItem(const tstring &OldPath, const tstring &NewPath);
00171 void MustMoveItem(const tstring &OldPath, const tstring &NewPath);
00172
00173
00174 #ifdef WIN32
00175
00177 enum FILE_ENCODING
00178 {
00181 FILE_ENCODING_UTF16_LE = 1,
00182 FILE_ENCODING_UTF8 = 2,
00183 FILE_ENCODING_ANSI = 3,
00184
00185
00188
00189 FILE_ENCODING_FORCE_BOM = 0x00010000,
00191 FILE_ENCODING_NO_BOM = 0x00020000,
00193 FILE_ENCODING_AUTODETECT = 0x00040000,
00195 };
00196
00198
00200 void SaveUnicodeToFile(const tstring &FileName, const wstring &Data, unsigned Encoding);
00201 void SaveUnicodeToFile(const tstring &FileName, const wchar_t *Data, unsigned NumChars, unsigned Encoding);
00202
00203 void SaveUnicodeToStream(Stream *Dest, const wstring &Data, unsigned Encoding);
00204 void SaveUnicodeToStream(Stream *Dest, const wchar_t *Data, unsigned NumChars, unsigned Encoding);
00205
00207
00214 void LoadUnicodeFromFile(const tstring &FileName, wstring *Out, unsigned Encoding, FILE_ENCODING *OutEncoding = NULL);
00216
00217 void LoadUnicodeFromFile(const tstring &FileName, string *Out, unsigned Encoding, FILE_ENCODING *OutEncoding = NULL);
00218
00219 void LoadUnicodeFromStream(SeekableStream *Src, wstring *Out, unsigned Encoding, FILE_ENCODING *OutEncoding = NULL);
00220 void LoadUnicodeFromStream(SeekableStream *Src, string *Out, unsigned Encoding, FILE_ENCODING *OutEncoding = NULL);
00221
00222 #endif
00223
00225
00226
00227 }
00228
00229 #endif