Reactos
at listview 111 lines 2.0 kB view raw
1// File.h 2// This file is (C) 2002-2003 Royce Mitchell III and released under the BSD license 3 4#ifndef FILE_H 5#define FILE_H 6 7#ifdef WIN32 8# include <io.h> 9#elif defined(UNIX) 10# include <sys/stat.h> 11# include <unistd.h> 12#endif 13#include <string> 14 15class File 16{ 17public: 18 File() : _f(0) 19 { 20 } 21 22 File ( const char* filename, const char* mode ) : _f(0) 23 { 24 open ( filename, mode ); 25 } 26 27 ~File() 28 { 29 close(); 30 } 31 32 bool open ( const char* filename, const char* mode ); 33 34 bool seek ( long offset ) 35 { 36 return !fseek ( _f, offset, SEEK_SET ); 37 } 38 39 int get() 40 { 41 return fgetc ( _f ); 42 } 43 44 bool put ( int c ) 45 { 46 return fputc ( c, _f ) != EOF; 47 } 48 49 std::string getline ( bool strip_crlf = false ); 50 51 // this function searches for the next end-of-line and puts all data it 52 // finds until then in the 'line' parameter. 53 // 54 // call continuously until the function returns false ( no more data ) 55 bool next_line ( std::string& line, bool strip_crlf ); 56 57 /* 58 example usage: 59 60 bool mycallback ( const std::string& line, int line_number, long lparam ) 61 { 62 std::cout << line << std::endl; 63 return true; // continue enumeration 64 } 65 66 File f ( "file.txt", "rb" ); // open file for binary read-only ( i.e. "rb" ) 67 f.enum_lines ( mycallback, 0, true ); 68 */ 69 70 bool enum_lines ( bool (*callback)(const std::string& line, int line_number, long lparam), long lparam, bool strip_crlf ); 71 72 bool read ( void* data, unsigned len ) 73 { 74 return len == fread ( data, 1, len, _f ); 75 } 76 77 bool write ( const void* data, unsigned len ) 78 { 79 return len == fwrite ( data, 1, len, _f ); 80 } 81 82 size_t length(); 83 84 void close(); 85 86 bool isopened() 87 { 88 return _f != 0; 89 } 90 91 bool eof() 92 { 93 return feof(_f) ? true : false; 94 } 95 96 FILE* operator * () 97 { 98 return _f; 99 } 100 101 static bool LoadIntoString ( std::string& s, const char* filename ); 102 static bool SaveFromString ( const char* filename, const std::string& s, bool binary ); 103 104private: 105 File(const File&) {} 106 const File& operator = ( const File& ) { return *this; } 107 108 FILE * _f; 109}; 110 111#endif//FILE_H