00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef CEYLAN_STANDARD_FILE_H_
00028 #define CEYLAN_STANDARD_FILE_H_
00029
00030
00031 #include "CeylanFile.h"
00032 #include "CeylanFileSystemCommon.h"
00033
00034
00043 #include <fstream>
00044 #include <ctime>
00045 #include <string>
00046
00047
00048
00049
00050 namespace Ceylan
00051 {
00052
00053
00054 namespace System
00055 {
00056
00057
00058
00060 class CEYLAN_DLL StandardFileException: public FileException
00061 {
00062
00063 public:
00064
00065 explicit StandardFileException( const std::string & reason ) ;
00066
00067 virtual ~StandardFileException() throw() ;
00068
00069 } ;
00070
00071
00072
00073
00102 class CEYLAN_DLL StandardFile: public File
00103 {
00104
00105
00117 struct SystemSpecificPermissionFlag ;
00118
00119
00120
00121 public:
00122
00123
00135 virtual ~StandardFile() throw() ;
00136
00137
00138
00139
00140
00141
00142
00143
00148 virtual bool isOpen() const ;
00149
00150
00151
00160 virtual bool close() ;
00161
00162
00163
00172 virtual void saveAs( const std::string & newName ) ;
00173
00174
00175
00176
00177
00178
00179
00180
00188 virtual void lockForReading() const ;
00189
00190
00191
00199 virtual void unlockForReading() const ;
00200
00201
00202
00210 virtual void lockForWriting() const ;
00211
00212
00213
00221 virtual void unlockForWriting() const ;
00222
00223
00224
00233 virtual bool isLocked() const ;
00234
00235
00236
00237
00238
00239
00240
00248 virtual time_t getLastChangeTime() const ;
00249
00250
00251
00277 virtual Size read( Ceylan::Byte * buffer, Size maxLength ) ;
00278
00279
00280
00281
00282
00283
00284
00285
00286
00300 virtual Size write( const std::string & message ) ;
00301
00302
00303
00320 virtual Size write( const Ceylan::Byte * buffer,
00321 Size maxLength ) ;
00322
00323
00324
00333 virtual Position tell() ;
00334
00335
00336
00346 virtual void seek( Position targetPosition ) ;
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00366 virtual void serialize( FileDescriptor fd ) const ;
00367
00368
00369
00377 FileDescriptor getFileDescriptor() const ;
00378
00379
00380
00381
00382
00383
00384
00385
00386
00394 virtual StreamID getStreamID() const ;
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00417 virtual const std::string toString(
00418 Ceylan::VerbosityLevels level = Ceylan::high ) const ;
00419
00420
00421
00426 static std::string InterpretState(
00427 const std::ifstream & inputFile ) ;
00428
00429
00430
00440 static std::string InterpretState(
00441 const std::fstream & inputFile ) ;
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00480 static StandardFile & Create( const std::string & filename,
00481 OpeningFlag createFlag = CreateToWriteBinary,
00482 PermissionFlag permissionFlag = OwnerReadWrite ) ;
00483
00484
00485
00504 static StandardFile & Open( const std::string & filename,
00505 OpeningFlag openFlag = OpenToReadBinary ) ;
00506
00507
00508
00509
00510 protected:
00511
00512
00513
00546 explicit StandardFile( const std::string & name,
00547 OpeningFlag openFlag = CreateToWriteBinary,
00548 PermissionFlag permissionFlag = OwnerReadWrite ) ;
00549
00550
00551
00577 StandardFile(
00578 const std::string & name,
00579 Size length,
00580 FileDescriptor fd,
00581 PermissionFlag permissionFlag = OwnerReadWrite ) ;
00582
00583
00584
00585
00586
00587
00588
00589
00590
00597 virtual FileSystemManager & getCorrespondingFileSystemManager()
00598 const ;
00599
00600
00601
00608 virtual void reopen() ;
00609
00610
00611
00613 std::string interpretState() const ;
00614
00615
00616
00617
00618
00619
00620
00621
00622
00637 static int ConvertToFileDescriptorOpenFlag(
00638 OpeningFlag openFlag ) ;
00639
00640
00641
00660 static void ConvertToFileDescriptorPermissionFlag(
00661 PermissionFlag permissionFlag,
00662 struct SystemSpecificPermissionFlag & returned ) ;
00663
00664
00665
00666
00684 static std::ios_base::openmode ConvertToStreamOpenFlag(
00685 OpeningFlag openFlag, const std::string & filename ) ;
00686
00687
00688
00709 private:
00710
00711
00712
00721 StandardFile( const StandardFile & source ) ;
00722
00723
00724
00733 StandardFile & operator = ( const StandardFile & source ) ;
00734
00735
00736
00750 static void FromFDtoFD( FileDescriptor from,
00751 FileDescriptor to, Size length ) ;
00752
00753
00754
00760 FileDescriptor _fdes ;
00761
00762
00763
00769 std::fstream _fstream ;
00770
00771
00772 } ;
00773
00774
00775 }
00776
00777 }
00778
00779
00780
00781 #endif // CEYLAN_STANDARD_FILE_H_
00782