[Interest] QFile::write(const QByteArray&) does not write, all data?

alexander golks alex at golks.de
Mon May 14 09:32:38 CEST 2018


Am Sun, 13 May 2018 23:50:20 -0700
schrieb Thiago Macieira <thiago.macieira at intel.com>:

> On Sunday, 13 May 2018 23:28:47 PDT alexander golks wrote:
> > > In fact, QDataStream can't recover from any errors.  
> > 
> > as you've said, my origin problem is no error.
> > wouldn't it be possible for QDataStream to handle this no-errors, too?  
> 
> It already does.
> 
> int QDataStream::writeRawData(const char *s, int len)
> {
>     CHECK_STREAM_WRITE_PRECOND(-1)
>     int ret = dev->write(s, len);
>     if (ret != len)
>         q_status = WriteFailed;
>     return ret;
> }

it does, partly. the write has not failed, it simply has not written all data.
 
> > otherwise, as i still don't know the "no-error" conditions, i would always
> > need to use something like QDataStream::writeRawData, which is barely more
> > then a QFile::write, and no other operator<< methods.  
> 
> it will tell you if there was a write failure. See above.

yes, but all other operator<< methods not.

what about something like:

int QDataStream::writeRawData(const char *s, int len)
{
    CHECK_STREAM_WRITE_PRECOND(-1)
    qint64 bytesToWrite = len;
    qint64 totalWritten = 0;
    do {
        int ret = dev->write(s + totalWritten, bytesToWrite);
        if(ret < 0)
	    break;
        totalWritten += ret;
        bytesToWrite -= ret;
    } while (totalWritten < len);
    if(totalWritten != len)
        q_status = WriteFailed;
    return totalWritten;
}

and appropriate modifications for all other related methods.

-- 
/*
 *  All generalizations are false, including this one.
 *      -- Mark Twain
 */



More information about the Interest mailing list