]> Creatis software - clitk.git/blob - utilities/CxImage/xiofile.h
0cb7e1d8e6317ade39f0578ab4501274a40c4715
[clitk.git] / utilities / CxImage / xiofile.h
1 #if !defined(__xiofile_h)\r
2 #define __xiofile_h\r
3 \r
4 #include "xfile.h"\r
5 //#include <TCHAR.h>\r
6 \r
7 class DLL_EXP CxIOFile : public CxFile\r
8         {\r
9 public:\r
10         CxIOFile(FILE* fp = NULL)\r
11         {\r
12                 m_fp = fp;\r
13                 m_bCloseFile = (bool)(fp==0);\r
14         }\r
15 \r
16         ~CxIOFile()\r
17         {\r
18                 Close();\r
19         }\r
20 //////////////////////////////////////////////////////////\r
21         bool Open(LPCTSTR filename, LPCTSTR mode)\r
22         {\r
23                 if (m_fp) return false; // Can't re-open without closing first\r
24 \r
25                 m_fp = _tfopen(filename, mode);\r
26                 if (!m_fp) return false;\r
27 \r
28                 m_bCloseFile = true;\r
29 \r
30                 return true;\r
31         }\r
32 //////////////////////////////////////////////////////////\r
33         virtual bool Close()\r
34         {\r
35                 int iErr = 0;\r
36                 if ( (m_fp) && (m_bCloseFile) ){ \r
37                         iErr = fclose(m_fp);\r
38                         m_fp = NULL;\r
39                 }\r
40                 return (bool)(iErr==0);\r
41         }\r
42 //////////////////////////////////////////////////////////\r
43         virtual size_t  Read(void *buffer, size_t size, size_t count)\r
44         {\r
45                 if (!m_fp) return 0;\r
46                 return fread(buffer, size, count, m_fp);\r
47         }\r
48 //////////////////////////////////////////////////////////\r
49         virtual size_t  Write(const void *buffer, size_t size, size_t count)\r
50         {\r
51                 if (!m_fp) return 0;\r
52                 return fwrite(buffer, size, count, m_fp);\r
53         }\r
54 //////////////////////////////////////////////////////////\r
55         virtual bool Seek(long offset, int origin)\r
56         {\r
57                 if (!m_fp) return false;\r
58                 return (bool)(fseek(m_fp, offset, origin) == 0);\r
59         }\r
60 //////////////////////////////////////////////////////////\r
61         virtual long Tell()\r
62         {\r
63                 if (!m_fp) return 0;\r
64                 return ftell(m_fp);\r
65         }\r
66 //////////////////////////////////////////////////////////\r
67         virtual long    Size()\r
68         {\r
69                 if (!m_fp) return -1;\r
70                 long pos,size;\r
71                 pos = ftell(m_fp);\r
72                 fseek(m_fp, 0, SEEK_END);\r
73                 size = ftell(m_fp);\r
74                 fseek(m_fp, pos,SEEK_SET);\r
75                 return size;\r
76         }\r
77 //////////////////////////////////////////////////////////\r
78         virtual bool    Flush()\r
79         {\r
80                 if (!m_fp) return false;\r
81                 return (bool)(fflush(m_fp) == 0);\r
82         }\r
83 //////////////////////////////////////////////////////////\r
84         virtual bool    Eof()\r
85         {\r
86                 if (!m_fp) return true;\r
87                 return (bool)(feof(m_fp) != 0);\r
88         }\r
89 //////////////////////////////////////////////////////////\r
90         virtual long    Error()\r
91         {\r
92                 if (!m_fp) return -1;\r
93                 return ferror(m_fp);\r
94         }\r
95 //////////////////////////////////////////////////////////\r
96         virtual bool PutC(unsigned char c)\r
97         {\r
98                 if (!m_fp) return false;\r
99                 return (bool)(fputc(c, m_fp) == c);\r
100         }\r
101 //////////////////////////////////////////////////////////\r
102         virtual long    GetC()\r
103         {\r
104                 if (!m_fp) return EOF;\r
105                 return getc(m_fp);\r
106         }\r
107 //////////////////////////////////////////////////////////\r
108         virtual char *  GetS(char *string, int n)\r
109         {\r
110                 if (!m_fp) return NULL;\r
111                 return fgets(string,n,m_fp);\r
112         }\r
113 //////////////////////////////////////////////////////////\r
114         virtual long    Scanf(const char *format, void* output)\r
115         {\r
116                 if (!m_fp) return EOF;\r
117                 return fscanf(m_fp, format, output);\r
118         }\r
119 //////////////////////////////////////////////////////////\r
120 protected:\r
121         FILE *m_fp;\r
122         bool m_bCloseFile;\r
123         };\r
124 \r
125 #endif\r