www.pudn.com > acdx.rar > TextFile.h


#if !defined(TextFile_H) 
#define TextFile_H 
 
#include  
#include  
using namespace std; 
 
 
#include "Lock.h" 
#include "TimeStamp.h" 
 
 
 
 
///////////////////////////////////////////////////////////////////////////// 
// File status 
 
//##ModelId=424BB6400343 
struct TextFileStatus 
{ 
	//##ModelId=424BB6400354 
	TimeStamp	_ctime;					// creation date/time of file 
	//##ModelId=424BB6400364 
	TimeStamp	_mtime;					// last modification date/time of file 
	//##ModelId=424BB6400369 
	TimeStamp	_atime;					// last access date/time of file 
	//##ModelId=424BB6400374 
	LONG		_size;					// logical size of file in bytes 
	//##ModelId=424BB6400382 
	DWORD		_attribute;				// logical OR of CFile::Attribute enum values 
	//##ModelId=424BB6400392 
	TCHAR		_szFullName[_MAX_PATH];	// absolute path name 
 
}; 
 
//////////////////////////////////////////////////////////////////////////////// 
// TextFile 
// 
// Purpose: text file class 
 
 
//##ModelId=424BB64003E0 
class TextFile : 
	private Lock 
{ 
	//##ModelId=424BB64003E2 
	DWORD	_openFlags;			// flags used to open file 
	//##ModelId=424BB6410008 
	string	_name;				// name of file 
 
public: 
	//##ModelId=424BB6410017 
	HANDLE	_hFile; 
 
 
	//##ModelId=424BB6410018 
	TextFile (); 
	//##ModelId=424BB6410019 
	~TextFile ();  
 
	//##ModelId=424BB6410141 
	enum OpenFlags { 
		//##ModelId=424BB6410150 
		modeRead =          0x0000, 
		//##ModelId=424BB6410151 
		modeWrite =         0x0001, 
		//##ModelId=424BB641015F 
		modeReadWrite =     0x0002, 
		//##ModelId=424BB6410160 
		shareCompat =       0x0000, 
		//##ModelId=424BB641016F 
		shareExclusive =    0x0010, 
		//##ModelId=424BB6410170 
		shareDenyWrite =    0x0020, 
		//##ModelId=424BB641017E 
		shareDenyRead =     0x0030, 
		//##ModelId=424BB641017F 
		shareDenyNone =     0x0040, 
		//##ModelId=424BB641018E 
		modeNoInherit =     0x0080, 
		//##ModelId=424BB641018F 
		modeCreate =        0x1000, 
		//##ModelId=424BB641019E 
		modeNoTruncate =    0x2000, 
		//##ModelId=424BB641019F 
		typeText =          0x4000, // typeText and typeBinary are used in 
		//##ModelId=424BB64101AD 
		typeBinary =   (int)0x8000 // derived classes only 
		}; 
 
	//##ModelId=424BB64101BD 
	enum Attribute { 
		//##ModelId=424BB64101BF 
		normal =    0x00, 
		//##ModelId=424BB64101CC 
		readOnly =  0x01, 
		//##ModelId=424BB64101CD 
		hidden =    0x02, 
		//##ModelId=424BB64101DC 
		system =    0x04, 
		//##ModelId=424BB64101DD 
		volume =    0x08, 
		//##ModelId=424BB64101EC 
		directory = 0x10, 
		//##ModelId=424BB64101ED 
		archive =   0x20 
		}; 
 
	//##ModelId=424BB641020B 
	enum SeekPosition { begin = 0x0, current = 0x1, end = 0x2 }; 
 
	enum { hFileNull = -1 }; 
 
	//##ModelId=424BB6410027 
	bool isValid () 
	{ 
		if ( !invalidFile() ) 
			return true; 
		else 
			return false; 
	} 
 
 
	// show error 
	//##ModelId=424BB6410028 
	void	showLastError	(); 
	//##ModelId=424BB6410029 
	bool	invalidFile		(); 
 
	// open methods 
	//##ModelId=424BB6410036 
	bool	create			( string & fileName ); 
	//##ModelId=424BB6410038 
	bool	open			( string & fileName ); 
	//##ModelId=424BB6410047 
	bool	openFastRead	( string & fileName ); 
 
	//##ModelId=424BB6410055 
	bool	openAlways		( string & fileName ); 
	//##ModelId=424BB6410057 
	bool	open			( string & fileName, DWORD openFlags ); 
	//##ModelId=424BB6410066 
	void	close			(); 
	//##ModelId=424BB6410067 
	bool	create			(); 
	//##ModelId=424BB6410075 
	void	release			(); 
 
	// file info/position methods 
	//##ModelId=424BB6410076 
	bool	setPosition		( DWORD position ); 
	//##ModelId=424BB6410084 
	long	size			(); 
	//##ModelId=424BB6410085 
	bool	offsetPosition	( DWORD offset ); 
 
	// clear the file 
	//##ModelId=424BB6410094 
	void	clear			(); 
 
	// read/write methods 
	//##ModelId=424BB6410095 
	bool	write			( LPTSTR pBuffer, DWORD noToWrite ); 
	//##ModelId=424BB64100A4 
	bool	read			( LPTSTR pBuffer, DWORD noToRead ); 
 
	// file status 
	//##ModelId=424BB64100A7 
		   bool getStatus	( TextFileStatus& rStatus ); 
	//##ModelId=424BB64100B4 
	static bool getStatus	( LPCTSTR lpszFileName, TextFileStatus& rStatus ); 
	//##ModelId=424BB64100C4 
	static bool setStatus	( LPCTSTR lpszFileName, TextFileStatus& status ); 
 
	// file manipulation 
	//##ModelId=424BB64100D2 
	static bool rename		( LPCTSTR lpszOldName, LPCTSTR lpszNewName ); 
	//##ModelId=424BB64100D6 
	static bool remove		( LPCTSTR lpszFileName ); 
 
	// file path 
	//##ModelId=424BB64100E4 
	static bool getFullPath		( LPTSTR lpszPathOut, LPCTSTR lpszFileIn ); 
	//##ModelId=424BB64100F3 
	static bool getRoot			( LPCTSTR lpszPath, string & strRoot ); 
	//##ModelId=424BB6410101 
	static bool comparePath		( LPCTSTR lpszPath1, LPCTSTR lpszPath2 ); 
	//##ModelId=424BB6410105 
	static long getFileTitle	( LPCTSTR lpszPathName, LPTSTR lpszTitle, UINT nMax ); 
 
	// operators 
	//##ModelId=424BB6410115 
	TextFile &  operator << ( string & buffer ) 
	{ 
		write( (LPTSTR) buffer.c_str(), buffer.size() ); 
		return *this; 
	} 
 
	//##ModelId=424BB6410122 
	TextFile &  operator >> ( stringstream & strm ) 
	{ 
		write( (LPTSTR) strm.str().c_str(), strm.str().size() ); 
		return *this; 
	} 
 
	//##ModelId=424BB6410124 
	TextFile &  operator << ( LPCTSTR buffer ) 
	{ 
		write( (LPTSTR) buffer, lstrlen(buffer) ); 
		return *this; 
	} 
 
	//##ModelId=424BB6410131 
	TextFile &  operator << ( LPTSTR buffer ) 
	{ 
		write( buffer, lstrlen(buffer) ); 
		return *this; 
	} 
 
	//##ModelId=424BB6410133 
	operator HANDLE () 
	{ 
		return _hFile; 
	} 
 
	// test if file open 
	//##ModelId=424BB6410140 
	bool isOpen () 
	{ 
		if ( _hFile == 0 || _hFile == INVALID_HANDLE_VALUE ) 
			return false; 
		else 
			return true; 
	} 
}; 
 
void operator << ( stringstream & strm, TextFile & file ); 
void operator << ( TextFile & file, stringstream & strm ); 
 
 
inline bool isDirSep(TCHAR ch) 
{ 
	return (ch == '\\' || ch == '/'); 
} 
 
//##ModelId=424BB64100A7 
inline 
bool TextFile::getStatus ( TextFileStatus& rStatus ) 
{ 
	return TextFile::getStatus( _name.c_str(), rStatus ); 
} 
 
 
 
#endif