18
18
// You should have received a copy of the GNU General Public License
19
19
// along with this program. If not, write to the Free Software Foundation,
20
// Inc. ,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20
// Inc, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23
//#define _KVI_DEBUG_CHECK_RANGE_
22
// =============================================================================
24
#define _KVI_DEBUG_CHECK_RANGE_
25
#define _KVI_DEBUG_CLASS_NAME_ "KviFileUtils"
27
#define _KVI_FILEUTILS_CPP_
24
29
#include "kvi_debug.h"
26
#include "kvi_settings.h"
28
#define _KVI_FILEUTLIS_CPP_
30
#include "kvi_filedialog.h"
29
31
#include "kvi_fileutils.h"
31
#include "kvi_locale.h"
35
#include <qfileinfo.h>
37
//================ kvi_askFor*Name ============//
39
#include <qfiledialog.h>
32
#include "kvi_string.h"
34
// ================ kvi_askFor*Name ============
41
36
QString kvi_askForDirectoryName(const char *basePath)
43
return QFileDialog::getExistingDirectory(basePath);
46
QString kvi_askForOpenFileName(const char *basePath,const char *filter)
48
return QFileDialog::getOpenFileName(basePath,filter);
51
QStringList kvi_askForOpenFileNames(const char *basePath,const char *filter)
53
return QFileDialog::getOpenFileNames(filter,basePath);
38
return KviFileDialog::getExistingDirectory(basePath);
41
QString kvi_askForOpenFileName(const char *basePath, const char *filter)
43
return KviFileDialog::getOpenFileName(basePath, filter);
46
QStringList kvi_askForOpenFileNames(const char *basePath, const char *filter)
48
return KviFileDialog::getOpenFileNames(filter, basePath);
56
51
QString kvi_askForSaveFileName(const char *baseFileName)
58
return QFileDialog::getSaveFileName(baseFileName);
53
return KviFileDialog::getSaveFileName(baseFileName);
61
//================ kvi_isAbsolutePath ===============//
56
// ================ kvi_isAbsolutePath ===============
63
57
bool kvi_isAbsolutePath(const char *path)
65
59
__range_valid(path);
66
return ((*path)=='/');
60
return ((*path) == '/');
69
//============ kvi_directoryExists ================//
63
// ============ kvi_directoryExists ================
71
64
bool kvi_directoryExists(const char *path)
73
66
__range_valid(path);
118
//=================== kvi_readLine =====================//
120
bool kvi_readLine(QFile *f,KviStr &str)
116
// =================== kvi_readLine =====================
117
bool kvi_readLine(QFile *f, KviStr &str)
122
119
char tmp_buf[256];
124
// char *cur_ptr = tmp_buf;
126
122
int ch = f->getch();
128
while((ch != -1)&&(ch != '\n')&&(ch != 0)){
124
while( (ch != -1) && (ch != '\n') && (ch != 0) ) {
129
125
tmp_buf[cur_len] = ch;
132
if(tmp_buf[255] == '\r')cur_len--; //Ignore CR...
133
str.append(tmp_buf,cur_len);
127
if( cur_len > 255 ) {
128
if( tmp_buf[255] == '\r' ) cur_len--; // Ignore CR...
129
str.append(tmp_buf, cur_len);
139
135
KviStr fName = f->name();
140
debug("Warning : %s is not an ascii file",fName.ptr());
143
if(tmp_buf[cur_len-1] == '\r')cur_len--; //Ignore last CR
144
str.append(tmp_buf,cur_len);
146
// debug("ch is now %c , cur_len is now %d , string is %s",ch,cur_len,str.ptr());
147
return (ch == '\n'); //more data to read else a broken file or EOF
136
debug("Warning : %s is not an ASCII file", fName.ptr());
139
if( tmp_buf[cur_len-1] == '\r' ) cur_len--; // Ignore last CR
140
str.append(tmp_buf, cur_len);
142
return (ch == '\n'); // More data to read else a broken file or EOF
150
//==================== kvi_readStrippedLine =====================//
152
bool kvi_readStrippedLine(QFile *f,KviStr &str)
145
// ==================== kvi_readStrippedLine =====================
146
bool kvi_readStrippedLine(QFile *f, KviStr &str)
154
bool bRet = kvi_readLine(f,str);
148
bool bRet = kvi_readLine(f, str);
155
149
str.stripWhiteSpace();
159
//==================== kvi_readFirstNonEmptyStrippedLine =========================//
161
bool kvi_readFirstNonEmptyStrippedLine(QFile *f,KviStr &str)
153
// ==================== kvi_readFirstNonEmptyStrippedLine =========================
154
bool kvi_readFirstNonEmptyStrippedLine(QFile *f, KviStr &str)
165
bContinue = kvi_readStrippedLine(f,str);
166
} while(bContinue && str.isEmpty());
158
bContinue = kvi_readStrippedLine(f, str);
159
} while( bContinue && str.isEmpty() );
167
160
return bContinue;
170
//=================== kvi_writeLine =======================//
172
bool kvi_writeLine(QFile *f,const char *line)
163
// =================== kvi_writeLine =======================
164
bool kvi_writeLine(QFile *f, const char *line)
174
bool bRet = (f->writeBlock(line,strlen(line)) != -1);
166
bool bRet = (f->writeBlock(line, strlen(line)) != -1);
175
167
return bRet ? (f->putch('\n') != -1) : false;
178
//=================== kvi_loadFile =======================//
180
bool kvi_loadFile(const char *path,KviStr &buffer)
170
// =================== kvi_loadFile =======================
171
bool kvi_loadFile(const char *path, KviStr &buffer)
183
if(!f.open(IO_ReadOnly))return false;
174
if( !f.open(IO_ReadOnly) ) return false;
186
while(kvi_readLine(&f,tmp)){
177
while( kvi_readLine(&f, tmp) ) {
187
178
buffer.append(tmp);
188
buffer.append('\n'); // kvi_readLine returned true...last char was a newline
179
buffer.append('\n'); // kvi_readLine returned true... last char was a newline
190
// kvi_readLine returned false , no ending newline encountered
181
// kvi_readLine returned false, no ending newline encountered,
191
182
// but tmp may still contain some data
192
if(tmp.hasData())buffer.append(tmp);
183
if( tmp.hasData() ) buffer.append(tmp);
196
bool kvi_writeFile(const char *path,KviStr &buffer)
187
bool kvi_writeFile(const char *path, KviStr &buffer)
199
if(!f.open(IO_WriteOnly|IO_Truncate))return false;
200
if(f.writeBlock(buffer.ptr(),buffer.len()) != buffer.len())return false;
190
if( !f.open(IO_WriteOnly | IO_Truncate) ) return false;
191
bool success = (f.writeBlock(buffer.ptr(), buffer.len()) == buffer.len());
192
f.close(); // Always close the file
205
bool kvi_copyFile(const char *src,const char *dst)
196
bool kvi_copyFile(const char *src, const char *dst)
208
if(!f1.open(IO_ReadOnly))return false;
199
if( !f1.open(IO_ReadOnly) ) return false;
210
if(!f2.open(IO_WriteOnly|IO_Truncate)){
201
if( !f2.open(IO_WriteOnly | IO_Truncate) ) {
214
205
char buffer[1024];
216
int len = f1.readBlock(buffer,1024);
206
while( !f1.atEnd() ) {
207
int len = f1.readBlock(buffer, 1024);
220
return false; //"serious error"
211
return false; // Serious error
222
f2.writeBlock(buffer,len);
213
f2.writeBlock(buffer, len);
229
bool kvi_renameFile(const char *src,const char *dst)
220
bool kvi_renameFile(const char *src, const char *dst)
232
return d.rename(_CHAR_2_QSTRING(src),_CHAR_2_QSTRING(dst));
223
return d.rename(_CHAR_2_QSTRING(src), _CHAR_2_QSTRING(dst));