1 #ifndef __FILESYS_HPP__ 2 #define __FILESYS_HPP__ 7 #if defined(_MSC_VER) || defined(WIN32) 31 #elif defined(OS_DARWIN) 32 String const DirSep = $T(
"/");
33 String const LineSep = $T(
"\r");
34 String const PathEnvSep = $T(
":");
187 template < typename _ChTy >
199 template < typename _ChTy >
277 String getFullPath()
const;
279 String getRealPath()
const;
288 #if defined(_MSC_VER) || defined(WIN32) 289 WIN32_FIND_DATA _wfd;
293 #if defined(__USE_LARGEFILE64) 318 virtual bool open(
String const & filename,
String const & mode );
320 virtual bool close();
322 virtual size_t read(
void * buf,
size_t size );
324 Buffer read(
size_t size );
326 template <
typename _PodType >
327 bool readType( _PodType * data,
size_t size =
sizeof(_PodType) )
329 return this->read( data, size ) == size;
332 template <
typename _PodType >
333 _PodType
readType(
size_t size =
sizeof(_PodType) )
336 this->readType( &data, size );
340 virtual size_t write(
void const * data,
size_t size );
342 size_t write(
Buffer const & buf );
344 template <
typename _PodType >
345 bool writeType( _PodType
const & data,
size_t size =
sizeof(_PodType) )
347 return this->write( &data, size ) == size;
350 virtual bool rewind();
354 virtual size_t tell();
358 virtual int puts(
String const & str );
362 virtual size_t size();
368 virtual Buffer buffer(
bool isPeek =
true );
388 MemoryFile(
void const * data,
size_t size,
bool isPeek =
false );
406 virtual bool close()
override;
407 virtual size_t read(
void * buf,
size_t size )
override;
408 virtual size_t write(
void const * data,
size_t size )
override;
409 virtual bool rewind()
override;
411 virtual size_t tell()
override;
412 virtual String getLine()
override;
414 virtual int puts(
String const & str )
override;
415 virtual bool eof()
override;
416 virtual size_t size()
override;
417 virtual Buffer buffer(
bool isPeek =
true )
override;
437 virtual bool open(
String const & filename,
String const & mode )
override;
438 virtual bool close()
override;
439 virtual size_t read(
void * buf,
size_t size )
override;
440 virtual size_t write(
void const * data,
size_t size )
override;
441 virtual bool rewind()
override;
443 virtual size_t tell()
override;
444 virtual String getLine()
override;
445 virtual bool eof()
override;
446 virtual size_t size()
override;
447 virtual Buffer buffer(
bool isPeek =
true )
override;
453 FILE *
get()
const {
return _fp; }
460 HANDLE getOsHandle()
const;
463 int getOsHandle()
const;
466 operator bool()
const {
return _fp != NULL; }
478 BlockOutFile(
String const & filename,
bool isTextMode =
true,
size_t blockSize = 1048576 );
482 virtual size_t write(
void const * data,
size_t size )
override;
507 virtual String getLine()
override;
508 virtual bool eof()
override;
525 #endif //__FILESYS_HPP__ XString< char > AnsiString
String PathWithSep(String const &path)
路径末尾带分隔符。如果path是空串则不作处理
StringArray _blockFiles
要加载的分块文件
String _filetitle
文件标题 filename
String BackupFile(String const &filePath, String const &bakDir=$T(""), String const &fmt=$T("%f_v%v%E"))
在给定目录备份指定文件
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 _basename
文件名 filename.txt
bool FilePutContents(String const &filename, AnsiString const &content, bool textMode=true)
把AnsiString内容写入文件,textMode表示是否为文本模式
bool SetCurrentDir(String const &path)
设置当前工作目录
time_t FileCTime(String const &filename)
获取文件创建时间
FileSysError(int errType, AnsiString const &s)
String NormalizePath(String const &path)
使路径规则化(末尾不带路径分割符)
String const & getName() const
取得文件名
String FilePath(String const &fullPath, String *fileName=NULL)
获取文件目录路径(末尾不含目录分隔符)
String const & getPath() const
取得路径
bool UnlinkFile(String const &filePath)
断开路径与磁盘文件的链接,即删除文件(只能删除文件,不能删除目录)
virtual size_t write(void const *data, size_t size) override
写数据,返回写入的字节数
bool writeType(_PodType const &data, size_t size=sizeof(_PodType))
写POD类型数据
virtual size_t read(void *buf, size_t size)
读数据,返回读取的字节数
FileEncoding RecognizeFileEncoding(winux::Buffer const &content, size_t *pIndex, size_t limitSize=-1)
识别文件编码
String const DirSep_UNIX
Unix目录分割符
size_t CommonDelete(String const &path)
通用删除。删除文件夹和文件,返回删除的文件夹和文件数
String _filetitle
文件标题 filename
virtual size_t write(void const *data, size_t size)
写数据,返回写入的字节数
String const LineSep_UNIX
Unix行分割符
bool MakeDirExists(String const &path, int mode=0755)
确保目录路径的存在性,如果不存在则创建。
bool RemovePath(String const &path)
删除文件和空目录。如果路径指向的是一个非空目录则失败
#define DISABLE_OBJECT_COPY(clsname)
String PathNoSep(String const &path)
路径末尾不带分隔符。如果path是空串则不作处理
time_t FileATime(String const &filename)
获取文件访问时间
bool RenamePath(String const &oldPath, String const &newPath)
重命名文件或目录,或者将文件或目录从一个目录移动到另一个目录
bool FilePutString(String const &filename, String const &content, FileEncoding encoding=feMultiByte)
把字符串内容写入文件
String _dirname
目录名 path/to
bool RemoveDir(String const &dirPath)
删除空目录。如果目录非空则失败
String _basename
文件名 filename.txt
String const LineSep_WIN
Windows行分割符
std::basic_string< _ChTy, std::char_traits< _ChTy >, std::allocator< _ChTy > > XString
缓冲区,表示内存中一块二进制数据(利用malloc/realloc进行内存分配)
bool FilePutContentsEx(String const &filename, Buffer const &content, bool textMode)
把Buffer内容写入文件,textMode表示是否为文本模式
bool readType(_PodType *data, size_t size=sizeof(_PodType))
读POD类型数据
String RealPathEx(String const &path, String const &workDirAbsPath)
根据指定工作目录计算绝对路径,不会检查存在性
String CombinePath(String const &dirPath, String const &fileName)
把一个目录路径和一个文件名组合成一个新路径
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)
String FileTitle(String const &fileName, String *extName=NULL)
获取文件标题
time_t FileMTime(String const &filename)
获取文件修改时间
String FileGetString(String const &filename, FileEncoding encoding=feMultiByte)
载入文件内容为文本字符串
String GetCurrentDir(void)
返回当前工作目录(末尾不含目录分隔符)
_PodType readType(size_t size=sizeof(_PodType))
读POD类型数据
XString< _ChTy > NewlineFromFile(_ChTy const *content, size_t len, bool b)
从文件中换行到程序环境中。b表示是否反序,配合IsLittleEndian()/IsBigEndian()使用
String RealPath(String const &path)
根据当前工作目录计算绝对路径,不会检查存在性
String GetExecutablePath(void)
获取可执行文件的全路径
uint64 FileSize(String const &filename)
获取文件大小(也适用于大于4GB的文件)
XString< _ChTy > NewlineToFile(_ChTy const *content, size_t len, bool b)
从程序环境中换行到文件中。b表示是否反序,配合IsLittleEndian()/IsBigEndian()使用
AnsiString FileGetContents(String const &filename, bool textMode=true)
载入文件内容为一个AnsiString,textMode表示是否为文本模式
String const DirSep_WIN
Windows目录分割符
String const PathEnvSep
PATH环境变量路径分割符
String const PathEnvSep_UNIX
Unix PATH环境变量路径分割符
String const DirSep_DARWIN
Apple系统目录分割符
XStringArray< tchar > StringArray
bool FileTouch(String const &filename, time_t time=(time_t)-1, time_t atime=(time_t)-1)
更新文件修改时间,访问时间
String _dirname
目录名 path/to
Buffer FileGetContentsEx(String const &filename, bool textMode)
载入文件内容为一个Buffer,textMode表示是否为文本模式
String const LineSep_DARWIN
Apple系统行分割符
String const PathEnvSep_WIN
Windows PATH环境变量路径分割符
size_t _writtenSize
以写入数据大小
String const PathEnvSep_DARWIN
Apple系统PATH环境变量路径分割符