You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdenetwork/kget/tdefileio.cpp

175 lines
5.8 KiB

/***************************************************************************
* tdefileio.cpp
* -------------------
*
* Revision : $Id$
* begin : Tue Jan 29 2002
* copyright : (C) 2002 by Patrick Charbonnier
*
* email : pch@freeshell.org
*
***************************************************************************/
// Author: Stefan Taferner <taferner@kde.org>
#include <tqapplication.h>
#include <tqstring.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include <tqfile.h>
#include <tqfileinfo.h>
#include <kdebug.h>
#include <tdelocale.h>
#include <tdemessagebox.h>
#include "tdefileio.h"
//-----------------------------------------------------------------------------
TQString kFileToString(const TQString & aFileName, bool aEnsureNL, bool aVerbose)
{
TQCString result;
TQFileInfo info(aFileName);
unsigned int readLen;
unsigned int len = info.size();
TQFile file(aFileName);
// assert(aFileName!=NULL);
if (aFileName == NULL)
return "";
if (!info.exists()) {
if (aVerbose)
KMessageBox::error(tqApp->mainWidget(), i18n("The specified file does not exist:\n%1").arg(aFileName));
return TQString();
}
if (info.isDir()) {
if (aVerbose)
KMessageBox::error(tqApp->mainWidget(), i18n("This is a folder and not a file:\n%1").arg(aFileName));
return TQString();
}
if (!info.isReadable()) {
if (aVerbose)
KMessageBox::error(tqApp->mainWidget(), i18n("You do not have read permission for the file:\n%1").arg(aFileName));
return TQString();
}
if (len <= 0)
return TQString();
if (!file.open(IO_Raw | IO_ReadOnly)) {
if (aVerbose)
switch (file.status()) {
case IO_ReadError:
KMessageBox::error(tqApp->mainWidget(), i18n("Could not read file:\n%1").arg(aFileName));
break;
case IO_OpenError:
KMessageBox::error(tqApp->mainWidget(), i18n("Could not open file:\n%1").arg(aFileName));
break;
default:
KMessageBox::error(tqApp->mainWidget(), i18n("Error while reading file:\n%1").arg(aFileName));
}
return TQString();
}
result.resize(len + (int) aEnsureNL + 1);
readLen = file.readBlock(result.data(), len);
if (aEnsureNL && result[len - 1] != '\n') {
result[len++] = '\n';
readLen++;
}
result[len] = '\0';
if (readLen < len) {
TQString msg = i18n("Could only read %1 bytes of %2.").arg(TDEGlobal::locale()->formatNumber(readLen,
0)).arg(TDEGlobal::locale()->formatNumber(len, 0));
KMessageBox::error(tqApp->mainWidget(), msg);
return TQString();
}
kdDebug() << "kFileToString: " << readLen << " bytes read" << endl;
return result;
}
//-----------------------------------------------------------------------------
static bool kBytesToFile(const char *aBuffer, int len, const TQString & aFileName, bool aAskIfExists, bool aBackup, bool aVerbose)
{
TQFile file(aFileName);
TQFileInfo info(aFileName);
int writeLen, rc;
// assert(aFileName!=NULL);
if (aFileName.isNull())
return false;
if (info.exists()) {
if (aAskIfExists) {
TQString str = i18n("File %1 exists.\nDo you want to replace it?").arg(aFileName);
rc = KMessageBox::questionYesNo(tqApp->mainWidget(), str, TQString(), i18n("Replace"),KStdGuiItem::cancel());
if (rc != KMessageBox::Yes)
return FALSE;
}
if (aBackup) {
// make a backup copy
TQString bakName = aFileName;
bakName += '~';
TQFile::remove(bakName);
rc = rename(TQFile::encodeName(aFileName), TQFile::encodeName(bakName));
if (rc) {
// failed to rename file
if (!aVerbose)
return FALSE;
rc = KMessageBox::warningContinueCancel(tqApp->mainWidget(), i18n("Failed to make a backup copy of %1.\nContinue anyway?").arg(aFileName));
if (rc != KMessageBox::Continue)
return FALSE;
}
}
}
if (!file.open(IO_Raw | IO_WriteOnly)) {
if (aVerbose)
switch (file.status()) {
case IO_WriteError:
KMessageBox::error(tqApp->mainWidget(), i18n("Could not write to file:\n%1").arg(aFileName));
break;
case IO_OpenError:
KMessageBox::error(tqApp->mainWidget(), i18n("Could not open file for writing:\n%1").arg(aFileName));
break;
default:
KMessageBox::error(tqApp->mainWidget(), i18n("Error while writing file:\n%1").arg(aFileName));
}
return FALSE;
}
writeLen = file.writeBlock(aBuffer, len);
if (writeLen < 0) {
KMessageBox::error(tqApp->mainWidget(), i18n("Could not write to file:\n%1").arg(aFileName));
return FALSE;
} else if (writeLen < len) {
TQString msg = i18n("Could only write %1 bytes of %2.").arg(TDEGlobal::locale()->formatNumber(writeLen,
0)).arg(TDEGlobal::locale()->formatNumber(len,
0));
KMessageBox::error(tqApp->mainWidget(), msg);
return FALSE;
}
return TRUE;
}
bool kCStringToFile(const TQCString & aBuffer, const TQString & aFileName, bool aAskIfExists, bool aBackup, bool aVerbose)
{
return kBytesToFile(aBuffer, aBuffer.length(), aFileName, aAskIfExists, aBackup, aVerbose);
}
bool kByteArrayToFile(const TQByteArray & aBuffer, const TQString & aFileName, bool aAskIfExists, bool aBackup, bool aVerbose)
{
return kBytesToFile(aBuffer, aBuffer.size(), aFileName, aAskIfExists, aBackup, aVerbose);
}