-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathio.cpp
More file actions
116 lines (94 loc) · 2.69 KB
/
Copy pathio.cpp
File metadata and controls
116 lines (94 loc) · 2.69 KB
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
// final.utils - Utility functions used by final projects.
// Copyright (c) 2004 - 2012 by Marek Sestak, marek.sestak@gmail.com
//
// 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 3 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.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//---------------------------------------------------------------------------
#include "io.h"
#include <stdio.h>
#include <string>
namespace utils {
//---------------------------------------------------------------------------
bool DoesFileExist( const TString &afilename )
{
bool ret = false;
FILE *f = fopen( afilename.c_str(), "r" );
if( f ) {
ret = true;
fclose( f );
}
return ret;
}
TString ReadLine( FILE* afile )
{
TString s;
if( feof(afile) )
return s;
char c = ' ';
while( !feof(afile) && c!='\n' )
{
c = fgetc( afile );
if( c=='\n' || feof(afile) )
break;
if( c!='\r' )
s += c;
}
return s;
}
long GetFileSize(FILE *stream)
{
long curpos, length;
curpos = ftell(stream);
fseek(stream, 0L, SEEK_END);
length = ftell(stream);
fseek(stream, curpos, SEEK_SET);
return length;
}
TStringVector* ReadFile( const TString& afilename )
{
TStringVector *ret = NULL;
FILE* f = fopen( afilename.c_str(), "r" );
if( f==NULL )
throw TException( "Failed to read file '" + afilename + "'" );
try {
int fsize = GetFileSize( f );
ret = new TStringVector;
if( fsize>0 ) {
TString str, line;
str.SetLength( fsize );
char *s = str.c_str();
int read = fread( s, 1, fsize, f );
fclose( f );
char *e = s + read;
*e = 0;
char *beg = s;
while( s!=e ) {
beg = s;
while( *s!=0 && *s!=10 && *s!=13 )
s++;
int linelen = s - beg;
line = TString( beg, linelen );
ret->push_back( line );
if( *s==13 ) s++;
if( *s==10 ) s++;
}
}
}
catch( ... ) {
fclose( f );
throw;
}
return ret;
}
//---------------------------------------------------------------------------
} // end of namespace utils