fastdo  0.6.8
filesys.hpp
浏览该文件的文档.
1 #ifndef __FILESYS_HPP__
2 #define __FILESYS_HPP__
3 //
4 // filesys 文件系统相关的功能
5 //
6 
7 #if defined(_MSC_VER) || defined(WIN32)
8 
9 #else
10 #include <dirent.h>
11 #endif
12 
13 namespace winux
14 {
15 
16 // 特殊平台变量 -------------------------------------------------------------
17 #if defined(_MSC_VER) || defined(WIN32)
18 String const DirSep = "\\";
19 String const LineSep = "\r\n";
20 String const PathEnvSep = ";";
21 #else
22 String const DirSep = "/";
23 String const LineSep = "\n";
24 String const PathEnvSep = ":";
25 #endif
26 
29 
35 WINUX_FUNC_DECL(String) FilePath( String const & fullPath, String * fileName = NULL );
36 
42 WINUX_FUNC_DECL(String) FileTitle( String const & fileName, String * extName = NULL );
43 
45 WINUX_FUNC_DECL(bool) IsAbsPath( String const & path );
46 
49 
51 WINUX_FUNC_DECL(String) RealPath( String const & path );
52 
56 WINUX_FUNC_DECL(String) RealPathEx( String const & path, String const & workDirAbsPath );
57 
60 
62 WINUX_FUNC_DECL(bool) SetCurrentDir( String const & path );
63 
65 WINUX_FUNC_DECL(bool) IsDir( String const & path );
66 
70 WINUX_FUNC_DECL(bool) DetectPath( String const & path, bool * isDir = NULL );
71 
73 WINUX_FUNC_DECL(ulong) FileSize( String const & filename );
75 WINUX_FUNC_DECL(uint64) FileSize64( String const & filename );
76 
84 WINUX_FUNC_DECL(bool) FileTime( String const & filename, time_t * ctime, time_t * mtime, time_t * atime );
86 WINUX_FUNC_DECL(time_t) FileCTime( String const & filename );
88 WINUX_FUNC_DECL(time_t) FileMTime( String const & filename );
90 WINUX_FUNC_DECL(time_t) FileATime( String const & filename );
91 
93 WINUX_FUNC_DECL(bool) FileTouch( String const & filename, time_t time = (time_t)-1, time_t atime = (time_t)-1 );
94 
96 WINUX_FUNC_DECL(String) PathWithSep( String const & path );
97 WINUX_FUNC_DECL(String) PathNoSep( String const & path );
100 
102 WINUX_FUNC_DECL(String) CombinePath( String const & dirPath, String const & fileName );
103 
105 WINUX_FUNC_DECL(void) FolderData( String const & path, StringArray * fileArr, StringArray * subFolderArr, int sortType = 0 );
106 
114 WINUX_FUNC_DECL(size_t) EnumFiles( String const & path, Mixed const & ext, StringArray * arrFiles, bool isRecursive = false );
115 
117 WINUX_FUNC_DECL(size_t) CommonDelete( String const & path );
118 
126 WINUX_FUNC_DECL(bool) MakeDirExists( String const & path, int mode = 0755 );
127 
129 WINUX_FUNC_DECL(AnsiString) FileGetContents( String const & filename, bool textMode = true );
130 
132 WINUX_FUNC_DECL(Buffer) FileGetContentsEx( String const & filename, bool textMode );
133 
135 WINUX_FUNC_DECL(bool) FilePutContents( String const & filename, AnsiString const & content, bool textMode = true );
136 
138 WINUX_FUNC_DECL(bool) FilePutContentsEx( String const & filename, Buffer const & content, bool textMode );
139 
141 WINUX_FUNC_DECL(void) WriteLog( String const & s );
142 
144 WINUX_FUNC_DECL(void) WriteBinLog( void const * data, size_t size );
145 
146 //#define __LOG__
147 #ifdef __LOG__
148 #define LOG(s) winux::WriteLog(s)
149 #define BIN_LOG(d,s) winux::WriteBinLog((d),(s))
150 #else
151 #define LOG(s)
152 #define BIN_LOG(d,s)
153 #endif
154 
155 #ifndef interface
156 #define interface struct
157 #endif
158 
160 class FileSysError : public Error
161 {
162 public:
163  enum
164  {
170  };
171  FileSysError( int errType, AnsiString const & s ) throw() : Error( errType, s ) { }
172 };
173 
176 {
177 private:
178  String _path;
179  String _name;
180 #if defined(_MSC_VER) || defined(WIN32)
181  WIN32_FIND_DATA _wfd;
182  SimpleHandle<HANDLE> _findFile;
183  bool _first;
184 #else
185  SimpleHandle<DIR*> _findFile;
186 #endif
187 public:
188  DirIterator( String const & path );
190  String const & getPath() const { return _path; }
192  String const & getName() const { return _name; }
194  String getFullPath() const;
196  String getRealPath() const;
198  bool isDir() const;
200  bool next();
201 
203 };
204 
206 interface WINUX_DLL IFile
207 {
208  virtual ~IFile() { }
209 
211  virtual bool open( String const & filename, String const & mode );
213  virtual bool close();
215  virtual size_t read( void * buf, size_t size );
217  virtual size_t write( void const * data, size_t size );
219  virtual size_t write( Buffer const & buf );
221  virtual bool rewind();
223  virtual bool seek( offset_t offset );
225  virtual size_t tell();
227  virtual String getLine();
229  virtual int puts( String const & str );
231  virtual bool eof();
233  virtual size_t size();
235  virtual void * buffer( size_t * size );
237  virtual AnsiString buffer();
238 };
239 
241 class WINUX_DLL File : public IFile
242 {
243 protected:
245  FILE * _fp;
246  bool _autoload;
247  size_t _fileSize;
248  size_t _loadedSize;
250 
251  void _loadData();
252 public:
253  File( String const & filename, String const & mode, bool autoload = true );
254  virtual ~File();
255 
256  virtual bool open( String const & filename, String const & mode ) override;
257  virtual bool close() override;
258  virtual size_t read( void * buf, size_t size ) override;
259  virtual size_t write( void const * data, size_t size ) override;
260  virtual size_t write( Buffer const & buf ) override;
261  virtual bool rewind() override;
262  virtual bool seek( offset_t offset ) override;
263  virtual size_t tell() override;
264  virtual String getLine() override;
265  virtual int puts( String const & str ) override;
266  virtual bool eof() override;
267  virtual size_t size() override;
268  virtual void * buffer( size_t * size ) override;
269  virtual AnsiString buffer() override;
270 
271  size_t loadedSize() const { return _loadedSize; }
272  operator bool() const { return _fp != NULL; }
273 
275 };
276 
279 {
280 protected:
285  long _fileno;
286 
287  bool _isTextMode;
288  size_t _blockSize;
289 
290 public:
291  BlockOutFile( String const & filename, bool isTextMode = true, size_t blockSize = 1048576 );
292 
293  bool nextBlock();
294  virtual size_t write( void const * data, size_t size ) override;
295  virtual size_t write( Buffer const & buf ) override;
296  virtual int puts( String const & str ) override;
297 
299 };
300 
302 class WINUX_DLL BlockInFile : public File
303 {
304 protected:
309  long _index;
310 
311  bool _isTextMode;
313 public:
314  BlockInFile( String const & filename, bool isTextMode = true );
315 
316  bool nextBlock();
317  virtual bool eof() override;
318 
320 };
321 
322 }
323 
324 #endif //__FILESYS_HPP__
XString< char > AnsiString
Definition: utilities.hpp:212
String PathWithSep(String const &path)
路径分隔符整理
StringArray _blockFiles
要加载的分块文件
Definition: filesys.hpp:312
String _filetitle
文件标题 filename
Definition: filesys.hpp:283
bool FileTime(String const &filename, time_t *ctime, time_t *mtime, time_t *atime)
获取文件时间
bool IsAbsPath(String const &path)
判断是否为绝对路径
void FolderData(String const &path, StringArray *fileArr, StringArray *subFolderArr, int sortType=0)
获取文件夹中的文件和子文件夹。sortType:0结果不排序 1正序 2反序
String _filename
Definition: filesys.hpp:244
String _basename
文件名 filename.txt
Definition: filesys.hpp:306
bool FilePutContents(String const &filename, AnsiString const &content, bool textMode=true)
把AnsiString内容写入文件,textMode表示是否为文本模式
文件系统错误:无效参数
Definition: filesys.hpp:169
#define WINUX_DLL
Definition: utilities.hpp:60
long _index
文件索引
Definition: filesys.hpp:309
bool SetCurrentDir(String const &path)
设置当前工作目录
time_t FileCTime(String const &filename)
获取文件创建时间
FileSysError(int errType, AnsiString const &s)
Definition: filesys.hpp:171
String NormalizePath(String const &path)
使路径规则化(末尾不带路径分割符)
String const & getName() const
取得文件名
Definition: filesys.hpp:192
String FilePath(String const &fullPath, String *fileName=NULL)
获取路径名(末尾不含目录分隔符)
String const & getPath() const
取得路径
Definition: filesys.hpp:190
XString< tchar > String
Definition: utilities.hpp:216
分块输入文件
Definition: filesys.hpp:302
目录文件枚举器
Definition: filesys.hpp:175
String _extname
扩展名 .txt
Definition: filesys.hpp:308
文件系统错误类
Definition: filesys.hpp:160
文件操作类
Definition: filesys.hpp:241
Buffer _buf
Definition: filesys.hpp:249
size_t CommonDelete(String const &path)
通用删除,删除文件夹和文件,返回删除的文件夹和文件数
String _filetitle
文件标题 filename
Definition: filesys.hpp:307
bool MakeDirExists(String const &path, int mode=0755)
确保目录路径的存在性,如果不存在则创建。
#define DISABLE_OBJECT_COPY(clsname)
Definition: utilities.hpp:81
bool _autoload
当以读取模式打开时,是否自动载入数据到缓冲区
Definition: filesys.hpp:246
String PathNoSep(String const &path)
time_t FileATime(String const &filename)
获取文件访问时间
long _fileno
文件编号
Definition: filesys.hpp:285
String const DirSep
目录分割符
Definition: filesys.hpp:18
void WriteLog(String const &s)
日志
String _dirname
目录名 path/to
Definition: filesys.hpp:305
String _basename
文件名 filename.txt
Definition: filesys.hpp:282
size_t _blockSize
块大小
Definition: filesys.hpp:288
缓冲区,表示内存中一块二进制数据(利用malloc/realloc进行内存分配)
Definition: utilities.hpp:528
bool _isTextMode
是否文本模式
Definition: filesys.hpp:311
bool FilePutContentsEx(String const &filename, Buffer const &content, bool textMode)
把Buffer内容写入文件,textMode表示是否为文本模式
String RealPathEx(String const &path, String const &workDirAbsPath)
根据指定工作目录计算绝对路径,不会检查存在性
String CombinePath(String const &dirPath, String const &fileName)
把一个目录路径和一个文件名组合成一个新路径
String _extname
扩展名 .txt
Definition: filesys.hpp:284
bool DetectPath(String const &path, bool *isDir=NULL)
探测一个路径是存在还是不存在,是目录还是文件
size_t EnumFiles(String const &path, Mixed const &ext, StringArray *arrFiles, bool isRecursive=false)
在指定路径下枚举指定扩展名的文件
bool IsDir(String const &path)
判断是否是一个目录
#define WINUX_FUNC_DECL(ret)
Definition: utilities.hpp:64
bool _isTextMode
是否文本模式
Definition: filesys.hpp:287
String FileTitle(String const &fileName, String *extName=NULL)
获取文件标题
time_t FileMTime(String const &filename)
获取文件修改时间
文件系统错误:无权限拒绝访问
Definition: filesys.hpp:168
String GetCurrentDir(void)
返回当前工作目录(末尾不含目录分隔符)
ulong FileSize(String const &filename)
获取文件大小
String RealPath(String const &path)
根据当前工作目录计算绝对路径,不会检查存在性
String GetExecutablePath(void)
获取可执行文件的全路径
文件系统错误:文件或目录不存在
Definition: filesys.hpp:167
size_t _loadedSize
实际加载的字节大小,这和文件大小不一定相同
Definition: filesys.hpp:248
FILE * _fp
Definition: filesys.hpp:245
混合体,能表示多种类型的值
Definition: utilities.hpp:750
错误类
Definition: utilities.hpp:505
分块输出文件
Definition: filesys.hpp:278
AnsiString FileGetContents(String const &filename, bool textMode=true)
载入文件内容为一个AnsiString,textMode表示是否为文本模式
size_t _fileSize
文件的字节大小,这和数据加载大小不一定相同
Definition: filesys.hpp:247
文件接口
Definition: filesys.hpp:206
unsigned long ulong
Definition: utilities.hpp:171
unsigned __int64 uint64
Definition: utilities.hpp:185
String const PathEnvSep
PATH环境变量路径分割符
Definition: filesys.hpp:20
uint64 FileSize64(String const &filename)
获取文件大小(大于4GB的文件)
virtual ~IFile()
Definition: filesys.hpp:208
String const LineSep
行分割符
Definition: filesys.hpp:19
XStringArray< tchar > StringArray
Definition: utilities.hpp:227
bool FileTouch(String const &filename, time_t time=(time_t)-1, time_t atime=(time_t)-1)
更新文件修改时间,访问时间
size_t loadedSize() const
Definition: filesys.hpp:271
String _dirname
目录名 path/to
Definition: filesys.hpp:281
Buffer FileGetContentsEx(String const &filename, bool textMode)
载入文件内容为一个Buffer,textMode表示是否为文本模式
void WriteBinLog(void const *data, size_t size)
二进制日志
跨平台基础功能库
Definition: archives.hpp:7
intptr_t offset_t
Definition: utilities.hpp:180