File: z_file.h

package info (click to toggle)
glhack 1.2-8.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 26,744 kB
  • sloc: ansic: 208,571; cpp: 13,139; yacc: 2,005; makefile: 1,152; lex: 377; sh: 121; awk: 89; sed: 11
file content (126 lines) | stat: -rw-r--r-- 3,588 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
//------------------------------------------------------------------------
//  FILE utilities
//------------------------------------------------------------------------
//
//  Z C++ Lib (C) 2001-2002 Andrew Apted
//
//  This program is free software; you can redistribute it and/or
//  modify it under the terms of the GNU General Public License
//  as published by the Free Software Foundation; either version 2
//  of the License, or (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//------------------------------------------------------------------------

#ifndef __Z_FILE_H__
#define __Z_FILE_H__

#include <string>

#include "z_string.h"


struct Filename
{
  /* This is a simple wrapper class for handling filenames */

  string str;
   
  // platform specifics:
  static const char DirSep;
  static const bool AllowDrives;
  static const bool CaseSensitive;
  
  Filename(const string& fname);
  Filename(const char *fname);

  Filename(const Filename& fname);
  Filename& operator= (const Filename& fname);

  bool operator< (const Filename& src) const;
  bool operator== (const Filename& src) const;
 
  Filename Drive() const;
  Filename Path() const;
  Filename File() const;
  Filename Ext() const;
  // these routines return the drive/path/file/extension of the
  // filename, possibly the empty string if none.  Note that Path()
  // will include any drive, and File() will include any extension.

  Filename& RemovePath();
  Filename& RemoveExt();
  // these remove any path/extension from the filename.

  Filename& SetPath(const Filename& path);
  Filename& SetExt(const Filename& ext);
  // these change the path/extension to the one given.  The empty
  // string is allowed.
 
  Filename& MakeCanonical();
  // checks whether the filename follows the platform-specific
  // conventions.  If yes, returns true, otherwise the filename is
  // converted and false is returned.
};

inline Filename::Filename(const string& fname) : str(fname) 
{ }

inline Filename::Filename(const char *fname) : str(fname)
{ }

inline Filename::Filename(const Filename& src) : str(src.str)
{ }

inline Filename& Filename::operator= (const Filename &src)
{
  CHECK_SELF_ASSIGN(src);
  str = src.str;
  return *this;
}


//------------------------------------------------------------------------
//
//  UTILITIES
// 

namespace Z_File
{
  bool Exists(const Filename& fname);
  // check if the given file exists.

  FILE *Open(const Filename& fname, const char *mode);
  // opens the given file.  Returns 0 if unsuccessful, otherwise a
  // normal stdio file handle -- use FileClose() when done.

  void Close(FILE *fp);
  // mainly here for completeness.
  
  bool Delete(const Filename& fname);
  // deletes the given file.  Returns true if successful.
  
  bool Rename(const Filename& src, const Filename& dest);
  // renames the given file.  Returns true if successful.  Mainly here
  // for completeness. 
 
  bool Copy(const Filename& src, const Filename& dest);
  // make a copy of the source file into the destination file.  The
  // destination will be overwritten if it already exists.  Returns
  // true if successful.
  
  /* ---- test/debug routines ---- */
   
  void TestPlatform();
  // print the platform specifics to stdout.

  void TestNames();
  // test the filename checking & modifying routines.
}


#endif /* __Z_FILE_H__ */