libkdepim Library API Documentation

kfileio.cpp

00001 // kfileio.cpp 00002 // Author: Stefan Taferner <taferner@kde.org> 00003 // License: GPL 00004 00005 #ifdef HAVE_CONFIG_H 00006 #include <config.h> 00007 #endif 00008 00009 #include <kmessagebox.h> 00010 #include <kdebug.h> 00011 00012 #include <assert.h> 00013 #include <qdir.h> 00014 00015 #include <klocale.h> 00016 #include <kstdguiitem.h> 00017 00018 namespace KPIM { 00019 00020 //----------------------------------------------------------------------------- 00021 static void msgDialog(const QString &msg) 00022 { 00023 KMessageBox::sorry(0, msg, i18n("File I/O Error")); 00024 } 00025 00026 00027 //----------------------------------------------------------------------------- 00028 QCString kFileToString(const QString &aFileName, bool aEnsureNL, bool aVerbose) 00029 { 00030 QCString result; 00031 QFileInfo info(aFileName); 00032 unsigned int readLen; 00033 unsigned int len = info.size(); 00034 QFile file(aFileName); 00035 00036 //assert(aFileName!=0); 00037 if( aFileName.isEmpty() ) 00038 return ""; 00039 00040 if (!info.exists()) 00041 { 00042 if (aVerbose) 00043 msgDialog(i18n("The specified file does not exist:\n%1").arg(aFileName)); 00044 return QCString(); 00045 } 00046 if (info.isDir()) 00047 { 00048 if (aVerbose) 00049 msgDialog(i18n("This is a folder and not a file:\n%1").arg(aFileName)); 00050 return QCString(); 00051 } 00052 if (!info.isReadable()) 00053 { 00054 if (aVerbose) 00055 msgDialog(i18n("You do not have read permissions " 00056 "to the file:\n%1").arg(aFileName)); 00057 return QCString(); 00058 } 00059 if (len <= 0) return QCString(); 00060 00061 if (!file.open(IO_Raw|IO_ReadOnly)) 00062 { 00063 if (aVerbose) switch(file.status()) 00064 { 00065 case IO_ReadError: 00066 msgDialog(i18n("Could not read file:\n%1").arg(aFileName)); 00067 break; 00068 case IO_OpenError: 00069 msgDialog(i18n("Could not open file:\n%1").arg(aFileName)); 00070 break; 00071 default: 00072 msgDialog(i18n("Error while reading file:\n%1").arg(aFileName)); 00073 } 00074 return QCString(); 00075 } 00076 00077 result.resize(len + (int)aEnsureNL + 1); 00078 readLen = file.readBlock(result.data(), len); 00079 if (aEnsureNL && result[len-1]!='\n') 00080 { 00081 result[len++] = '\n'; 00082 readLen++; 00083 } 00084 result[len] = '\0'; 00085 00086 if (readLen < len) 00087 { 00088 QString msg = i18n("Could only read %1 bytes of %2.") 00089 .arg(readLen).arg(len); 00090 msgDialog(msg); 00091 return QCString(); 00092 } 00093 00094 return result; 00095 } 00096 00097 //----------------------------------------------------------------------------- 00098 #if 0 // unused 00099 QByteArray kFileToBytes(const QString &aFileName, bool aVerbose) 00100 { 00101 QByteArray result; 00102 QFileInfo info(aFileName); 00103 unsigned int readLen; 00104 unsigned int len = info.size(); 00105 QFile file(aFileName); 00106 00107 //assert(aFileName!=0); 00108 if( aFileName.isEmpty() ) 00109 return result; 00110 00111 if (!info.exists()) 00112 { 00113 if (aVerbose) 00114 msgDialog(i18n("The specified file does not exist:\n%1") 00115 .arg(aFileName)); 00116 return result; 00117 } 00118 if (info.isDir()) 00119 { 00120 if (aVerbose) 00121 msgDialog(i18n("This is a folder and not a file:\n%1") 00122 .arg(aFileName)); 00123 return result; 00124 } 00125 if (!info.isReadable()) 00126 { 00127 if (aVerbose) 00128 msgDialog(i18n("You do not have read permissions " 00129 "to the file:\n%1").arg(aFileName)); 00130 return result; 00131 } 00132 if (len <= 0) return result; 00133 00134 if (!file.open(IO_Raw|IO_ReadOnly)) 00135 { 00136 if (aVerbose) switch(file.status()) 00137 { 00138 case IO_ReadError: 00139 msgDialog(i18n("Could not read file:\n%1").arg(aFileName)); 00140 break; 00141 case IO_OpenError: 00142 msgDialog(i18n("Could not open file:\n%1").arg(aFileName)); 00143 break; 00144 default: 00145 msgDialog(i18n("Error while reading file:\n%1").arg(aFileName)); 00146 } 00147 return result; 00148 } 00149 00150 result.resize(len); 00151 readLen = file.readBlock(result.data(), len); 00152 kdDebug(5300) << QString( "len %1" ).arg(len) << endl; 00153 00154 if (readLen < len) 00155 { 00156 QString msg; 00157 msg = i18n("Could only read %1 bytes of %2.") 00158 .arg(readLen).arg(len); 00159 msgDialog(msg); 00160 return result; 00161 } 00162 00163 return result; 00164 } 00165 #endif 00166 00167 //----------------------------------------------------------------------------- 00168 bool kBytesToFile(const char* aBuffer, int len, 00169 const QString &aFileName, 00170 bool aAskIfExists, bool aBackup, bool aVerbose) 00171 { 00172 QFile file(aFileName); 00173 int writeLen, rc; 00174 00175 //assert(aFileName!=0); 00176 if(aFileName.isEmpty()) 00177 return FALSE; 00178 00179 if (file.exists()) 00180 { 00181 if (aAskIfExists) 00182 { 00183 QString str; 00184 str = i18n("File %1 exists.\nDo you want to replace it?") 00185 .arg(aFileName); 00186 rc = KMessageBox::warningContinueCancel(0, 00187 str, i18n("Save to File"), i18n("&Replace")); 00188 if (rc != KMessageBox::Continue) return FALSE; 00189 } 00190 if (aBackup) 00191 { 00192 // make a backup copy 00193 QString bakName = aFileName; 00194 bakName += '~'; 00195 QFile::remove(bakName); 00196 if( !QDir::current().rename(aFileName, bakName) ) 00197 { 00198 // failed to rename file 00199 if (!aVerbose) return FALSE; 00200 rc = KMessageBox::warningContinueCancel(0, 00201 i18n("Failed to make a backup copy of %1.\nContinue anyway?") 00202 .arg(aFileName), 00203 i18n("Save to File"), KStdGuiItem::save() ); 00204 if (rc != KMessageBox::Continue) return FALSE; 00205 } 00206 } 00207 } 00208 00209 if (!file.open(IO_Raw|IO_WriteOnly|IO_Truncate)) 00210 { 00211 if (aVerbose) switch(file.status()) 00212 { 00213 case IO_WriteError: 00214 msgDialog(i18n("Could not write to file:\n%1").arg(aFileName)); 00215 break; 00216 case IO_OpenError: 00217 msgDialog(i18n("Could not open file for writing:\n%1") 00218 .arg(aFileName)); 00219 break; 00220 default: 00221 msgDialog(i18n("Error while writing file:\n%1").arg(aFileName)); 00222 } 00223 return FALSE; 00224 } 00225 00226 writeLen = file.writeBlock(aBuffer, len); 00227 00228 if (writeLen < 0) 00229 { 00230 if (aVerbose) 00231 msgDialog(i18n("Could not write to file:\n%1").arg(aFileName)); 00232 return FALSE; 00233 } 00234 else if (writeLen < len) 00235 { 00236 QString msg = i18n("Could only write %1 bytes of %2.") 00237 .arg(writeLen).arg(len); 00238 if (aVerbose) 00239 msgDialog(msg); 00240 return FALSE; 00241 } 00242 00243 return TRUE; 00244 } 00245 00246 bool kCStringToFile(const QCString& aBuffer, const QString &aFileName, 00247 bool aAskIfExists, bool aBackup, bool aVerbose) 00248 { 00249 return kBytesToFile(aBuffer, aBuffer.length(), aFileName, aAskIfExists, 00250 aBackup, aVerbose); 00251 } 00252 00253 bool kByteArrayToFile(const QByteArray& aBuffer, const QString &aFileName, 00254 bool aAskIfExists, bool aBackup, bool aVerbose) 00255 { 00256 return kBytesToFile(aBuffer, aBuffer.size(), aFileName, aAskIfExists, 00257 aBackup, aVerbose); 00258 } 00259 00260 }
KDE Logo
This file is part of the documentation for libkdepim Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Thu Oct 21 19:46:29 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003