summaryrefslogtreecommitdiff
path: root/src/file.cpp
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2007-04-10 20:16:19 +0000
committerMike Buland <eichlan@xagasoft.com>2007-04-10 20:16:19 +0000
commit070374dde0f53bff26078550997f7682e84412e5 (patch)
treed9088b02e9b5f08f25d7f07f3a26035eea00e8e9 /src/file.cpp
parente7ab7cb1604c04763bbdcece5885e6ce5aa100b4 (diff)
downloadlibbu++-070374dde0f53bff26078550997f7682e84412e5.tar.gz
libbu++-070374dde0f53bff26078550997f7682e84412e5.tar.bz2
libbu++-070374dde0f53bff26078550997f7682e84412e5.tar.xz
libbu++-070374dde0f53bff26078550997f7682e84412e5.zip
I did it, the streams don't start with an S now.
Diffstat (limited to 'src/file.cpp')
-rw-r--r--src/file.cpp100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/file.cpp b/src/file.cpp
new file mode 100644
index 0000000..5de5f6c
--- /dev/null
+++ b/src/file.cpp
@@ -0,0 +1,100 @@
1#include "file.h"
2#include "exceptions.h"
3#include <errno.h>
4
5Bu::File::File( const char *sName, const char *sFlags )
6{
7 fh = fopen( sName, sFlags );
8 if( fh == NULL )
9 {
10 throw Bu::FileException( errno, strerror(errno) );
11 }
12}
13
14Bu::File::~File()
15{
16 close();
17}
18
19void Bu::File::close()
20{
21 if( fh )
22 {
23 fclose( fh );
24 fh = NULL;
25 }
26}
27
28size_t Bu::File::read( void *pBuf, size_t nBytes )
29{
30 if( !fh )
31 throw FileException("File not open.");
32
33 int nAmnt = fread( pBuf, 1, nBytes, fh );
34
35 if( nAmnt == 0 )
36 throw FileException("End of file.");
37
38 return nAmnt;
39}
40
41size_t Bu::File::write( const void *pBuf, size_t nBytes )
42{
43 if( !fh )
44 throw FileException("File not open.");
45
46 return fwrite( pBuf, 1, nBytes, fh );
47}
48
49long Bu::File::tell()
50{
51 if( !fh )
52 throw FileException("File not open.");
53
54 return ftell( fh );
55}
56
57void Bu::File::seek( long offset )
58{
59 if( !fh )
60 throw FileException("File not open.");
61
62 fseek( fh, offset, SEEK_CUR );
63}
64
65void Bu::File::setPos( long pos )
66{
67 if( !fh )
68 throw FileException("File not open.");
69
70 fseek( fh, pos, SEEK_SET );
71}
72
73void Bu::File::setPosEnd( long pos )
74{
75 if( !fh )
76 throw FileException("File not open.");
77
78 fseek( fh, pos, SEEK_END );
79}
80
81bool Bu::File::isEOS()
82{
83 return feof( fh );
84}
85
86bool Bu::File::canRead()
87{
88 return true;
89}
90
91bool Bu::File::canWrite()
92{
93 return true;
94}
95
96bool Bu::File::canSeek()
97{
98 return true;
99}
100