diff options
author | dimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7> | 2012-03-22 19:19:06 (GMT) |
---|---|---|
committer | dimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7> | 2012-03-22 19:19:06 (GMT) |
commit | e620712c9dd41c56bbd56d16a5a3469b96fafbf0 (patch) | |
tree | 2a7451abfd771d43ea2b3ac2443d94c3eb5cfee7 /trunk/qtools/qfile.cpp | |
parent | 8f455b66da9db238655242d1213c05affac412d9 (diff) | |
download | Doxygen-Release_1_8_0.zip Doxygen-Release_1_8_0.tar.gz Doxygen-Release_1_8_0.tar.bz2 |
Created accidentallyRelease_1_8_0
Diffstat (limited to 'trunk/qtools/qfile.cpp')
-rw-r--r-- | trunk/qtools/qfile.cpp | 550 |
1 files changed, 0 insertions, 550 deletions
diff --git a/trunk/qtools/qfile.cpp b/trunk/qtools/qfile.cpp deleted file mode 100644 index 98ed9a3..0000000 --- a/trunk/qtools/qfile.cpp +++ /dev/null @@ -1,550 +0,0 @@ -/**************************************************************************** -** -** -** Implementation of QFile class -** -** Created : 930812 -** -** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. -** -** This file is part of the tools module of the Qt GUI Toolkit. -** -** This file may be distributed under the terms of the Q Public License -** as defined by Trolltech AS of Norway and appearing in the file -** LICENSE.QPL included in the packaging of this file. -** -** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. -** -** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -** licenses may use this file in accordance with the Qt Commercial License -** Agreement provided with the Software. -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -** information about Qt Commercial License Agreements. -** See http://www.trolltech.com/qpl/ for QPL licensing information. -** See http://www.trolltech.com/gpl/ for GPL licensing information. -** -** Contact info@trolltech.com if any conditions of this licensing are -** not clear to you. -** -**********************************************************************/ - -#include "qglobal.h" -#if defined(_OS_WIN32_) -#ifdef UNICODE -#ifndef _UNICODE -#define _UNICODE -#endif -#endif -#endif - -#include "qfile.h" -#include "qfiledefs_p.h" - -extern bool qt_file_access( const QString& fn, int t ); - -// NOT REVISED -/*! - \class QFile qfile.h - \brief The QFile class is an I/O device that operates on files. - - \ingroup io - - QFile is an I/O device for reading and writing binary and text files. A - QFile may be used by itself (readBlock and writeBlock) or by more - conveniently using QDataStream or QTextStream. - - Here is a code fragment that uses QTextStream to read a text - file line by line. It prints each line with a line number. - \code - QFile f("file.txt"); - if ( f.open(IO_ReadOnly) ) { // file opened successfully - QTextStream t( &f ); // use a text stream - QString s; - int n = 1; - while ( !t.eof() ) { // until end of file... - s = t.readLine(); // line of text excluding '\n' - printf( "%3d: %s\n", n++, (const char *)s ); - } - f.close(); - } - \endcode - - The QFileInfo class holds detailed information about a file, such as - access permissions, file dates and file types. - - The QDir class manages directories and lists of file names. - - \sa QDataStream, QTextStream -*/ - - -/*! - Constructs a QFile with no name. -*/ - -QFile::QFile() -{ - init(); -} - -/*! - Constructs a QFile with a file name \e name. - \sa setName() -*/ - -QFile::QFile( const QString &name ) - : fn(name) -{ - init(); -} - - -/*! - Destructs a QFile. Calls close(). -*/ - -QFile::~QFile() -{ - close(); -} - - -/*! - \internal - Initialize internal data. -*/ - -void QFile::init() -{ - setFlags( IO_Direct ); - setStatus( IO_Ok ); - fh = 0; - fd = 0; - length = 0; - ioIndex = 0; - ext_f = FALSE; // not an external file handle -} - - -/*! - \fn QString QFile::name() const - Returns the name set by setName(). - \sa setName(), QFileInfo::fileName() -*/ - -/*! - Sets the name of the file. The name can include an absolute directory - path or it can be a name or a path relative to the current directory. - - Do not call this function if the file has already been opened. - - Note that if the name is relative QFile does not associate it with the - current directory. If you change directory before calling open(), open - uses the new current directory. - - Example: - \code - QFile f; - QDir::setCurrent( "/tmp" ); - f.setName( "readme.txt" ); - QDir::setCurrent( "/home" ); - f.open( IO_ReadOnly ); // opens "/home/readme.txt" under UNIX - \endcode - - Also note that the directory separator '/' works for all operating - systems supported by Qt. - - \sa name(), QFileInfo, QDir -*/ - -void QFile::setName( const QString &name ) -{ - if ( isOpen() ) { -#if defined(CHECK_STATE) - qWarning( "QFile::setName: File is open" ); -#endif - close(); - } - fn = name; -} - -/*! - Returns TRUE if this file exists, otherwise FALSE. - \sa name() -*/ - -bool QFile::exists() const -{ - return qt_file_access( fn, F_OK ); -} - -/*! - Returns TRUE if the file given by \e fileName exists, otherwise FALSE. -*/ - -bool QFile::exists( const QString &fileName ) -{ - return qt_file_access( fileName, F_OK ); -} - - -/*! - Removes the file specified by the file name currently set. - Returns TRUE if successful, otherwise FALSE. - - The file is closed before it is removed. -*/ - -bool QFile::remove() -{ - close(); - return remove( fn ); -} - -#if defined(_OS_MAC_) || defined(_OS_MSDOS_) || defined(_OS_WIN32_) || defined(_OS_OS2_) || defined(_OS_CYGWIN_) -# define HAS_TEXT_FILEMODE // has translate/text filemode -#endif -#if defined(O_NONBLOCK) -# define HAS_ASYNC_FILEMODE -# define OPEN_ASYNC O_NONBLOCK -#elif defined(O_NDELAY) -# define HAS_ASYNC_FILEMODE -# define OPEN_ASYNC O_NDELAY -#endif - -/*! - Flushes the file buffer to the disk. - - close() also flushes the file buffer. -*/ - -void QFile::flush() -{ - if ( isOpen() && fh ) // can only flush open/buffered - fflush( fh ); // file -} - -/*! - Returns TRUE if the end of file has been reached, otherwise FALSE. - \sa size() -*/ - -bool QFile::atEnd() const -{ - if ( !isOpen() ) { -#if defined(CHECK_STATE) - qWarning( "QFile::atEnd: File is not open" ); -#endif - return FALSE; - } - if ( isDirectAccess() && !isTranslated() ) { - if ( at() < length ) - return FALSE; - } - return QIODevice::atEnd(); -} - -/*! - Reads a line of text. - - Reads bytes from the file until end-of-line is reached, or up to \a - maxlen bytes, and returns the number of bytes read, or -1 in case of - error. The terminating newline is not stripped. - - This function is efficient only for buffered files. Avoid - readLine() for files that have been opened with the \c IO_Raw - flag. - - \sa readBlock(), QTextStream::readLine() -*/ - -int QFile::readLine( char *p, uint maxlen ) -{ - if ( maxlen == 0 ) // application bug? - return 0; -#if defined(CHECK_STATE) - CHECK_PTR( p ); - if ( !isOpen() ) { // file not open - qWarning( "QFile::readLine: File not open" ); - return -1; - } - if ( !isReadable() ) { // reading not permitted - qWarning( "QFile::readLine: Read operation not permitted" ); - return -1; - } -#endif - int nread; // number of bytes read - if ( isRaw() ) { // raw file - nread = QIODevice::readLine( p, maxlen ); - } else { // buffered file - p = fgets( p, maxlen, fh ); - if ( p ) { - nread = qstrlen( p ); - ioIndex += nread; - } else { - nread = -1; - setStatus(IO_ReadError); - } - } - return nread; -} - - -/*! - Reads a line of text. - - Reads bytes from the file until end-of-line is reached, or up to \a - maxlen bytes, and returns the number of bytes read, or -1 in case of - error. The terminating newline is not stripped. - - This function is efficient only for buffered files. Avoid - readLine() for files that have been opened with the \c IO_Raw - flag. - - Note that the string is read as plain Latin1 bytes, not Unicode. - - \sa readBlock(), QTextStream::readLine() -*/ - -int QFile::readLine( QString& s, uint maxlen ) -{ - QByteArray ba(maxlen); - int l = readLine(ba.data(),maxlen); - if ( l >= 0 ) { - ba.truncate(l); - s = QString(ba); - } - return l; -} - - -/*! - Reads a single byte/character from the file. - - Returns the byte/character read, or -1 if the end of the file has been - reached. - - \sa putch(), ungetch() -*/ - -int QFile::getch() -{ -#if defined(CHECK_STATE) - if ( !isOpen() ) { // file not open - qWarning( "QFile::getch: File not open" ); - return EOF; - } - if ( !isReadable() ) { // reading not permitted - qWarning( "QFile::getch: Read operation not permitted" ); - return EOF; - } -#endif - - int ch; - - if ( !ungetchBuffer.isEmpty() ) { - int len = ungetchBuffer.length(); - ch = ungetchBuffer[ len-1 ]; - ungetchBuffer.truncate( len - 1 ); - return ch; - } - - if ( isRaw() ) { // raw file (inefficient) - char buf[1]; - ch = readBlock( buf, 1 ) == 1 ? buf[0] : EOF; - } else { // buffered file - if ( (ch = getc( fh )) != EOF ) - ioIndex++; - else - setStatus(IO_ReadError); - } - return ch; -} - -/*! - \fn int QFile::writeBlock( const QByteArray& data ) - \reimp - \internal - Should be removed in 3.0 -*/ - -/*! - Writes the character \e ch to the file. - - Returns \e ch, or -1 if some error occurred. - - \sa getch(), ungetch() -*/ - -int QFile::putch( int ch ) -{ -#if defined(CHECK_STATE) - if ( !isOpen() ) { // file not open - qWarning( "QFile::putch: File not open" ); - return EOF; - } - if ( !isWritable() ) { // writing not permitted - qWarning( "QFile::putch: Write operation not permitted" ); - return EOF; - } -#endif - if ( isRaw() ) { // raw file (inefficient) - char buf[1]; - buf[0] = ch; - ch = writeBlock( buf, 1 ) == 1 ? ch : EOF; - } else { // buffered file - if ( (ch = putc( ch, fh )) != EOF ) { - ioIndex++; - if ( ioIndex > length ) // update file length - length = ioIndex; - } else { - setStatus(IO_WriteError); - } - } - return ch; -} - -/*! - Puts the character \e ch back into the file and decrements the index if it - is not zero. - - This function is normally called to "undo" a getch() operation. - - Returns \e ch, or -1 if some error occurred. - - \sa getch(), putch() -*/ - -int QFile::ungetch( int ch ) -{ -#if defined(CHECK_STATE) - if ( !isOpen() ) { // file not open - qWarning( "QFile::ungetch: File not open" ); - return EOF; - } - if ( !isReadable() ) { // reading not permitted - qWarning( "QFile::ungetch: Read operation not permitted" ); - return EOF; - } -#endif - if ( ch == EOF ) // cannot unget EOF - return ch; - - if ( isSequentialAccess() && !fh) { - // pipe or similar => we cannot ungetch, so do it manually - ungetchBuffer +=ch; - return ch; - } - - if ( isRaw() ) { // raw file (very inefficient) - char buf[1]; - at( ioIndex-1 ); - buf[0] = ch; - if ( writeBlock(buf, 1) == 1 ) - at ( ioIndex-1 ); - else - ch = EOF; - } else { // buffered file - if ( (ch = ungetc(ch, fh)) != EOF ) - ioIndex--; - else - setStatus( IO_ReadError ); - } - return ch; -} - - -static QCString locale_encoder( const QString &fileName ) -{ - return fileName.local8Bit(); -} - - -static QFile::EncoderFn encoder = locale_encoder; - -/*! - When you use QFile, QFileInfo, and QDir to access the filesystem - with Qt, you can use Unicode filenames. On Unix, these filenames - are converted to an 8-bit encoding. If you want to do your own - file I/O on Unix, you should convert the filename using this - function. On Windows NT, Unicode filenames are supported directly - in the filesystem and this function should be avoided. On Windows 95, - non-Latin1 locales are not supported at this time. - - By default, this function converts to the local 8-bit encoding - determined by the user's locale. This is sufficient for - filenames that the user chooses. Filenames hard-coded into the - application should only use 7-bit ASCII filename characters. - - The conversion scheme can be changed using setEncodingFunction(). - This might be useful if you wish to give the user an option to - store in filenames in UTF-8, etc., but beware that such filenames - would probably then be unrecognizable when seen by other programs. - - \sa decodeName() -*/ - -QCString QFile::encodeName( const QString &fileName ) -{ - return (*encoder)(fileName); -} - -/*! - \enum QFile::EncoderFn - - This is used by QFile::setEncodingFunction(). -*/ - -/*! - Sets the function for encoding Unicode filenames. - The default encodes in the locale-specific 8-bit encoding. - - \sa encodeName() -*/ -void QFile::setEncodingFunction( EncoderFn f ) -{ - encoder = f; -} - -static -QString locale_decoder( const QCString &localFileName ) -{ - return QString::fromLocal8Bit(localFileName); -} - -static QFile::DecoderFn decoder = locale_decoder; - -/*! - This does the reverse of QFile::encodeName(). - - \sa setDecodingFunction() -*/ -QString QFile::decodeName( const QCString &localFileName ) -{ - return (*decoder)(localFileName); -} - -/*! - \enum QFile::DecoderFn - - This is used by QFile::setDecodingFunction(). -*/ - -/*! - Sets the function for decoding 8-bit filenames. - The default uses the locale-specific 8-bit encoding. - - \sa encodeName(), decodeName() -*/ - -void QFile::setDecodingFunction( DecoderFn f ) -{ - decoder = f; -} |