如何从gamit的qfile中获取时间序列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从gamit的qfile中获取时间序列相关的知识,希望对你有一定的参考价值。

参考技术A QFile类是一个操作文件的输入/输出设备。 详情请见……
#include <qfile.h>
继承了 QIODevice。
所有成员函数的列表。
公有成员

QFile ()

QFile ( const QString & name
)

~QFile ()

QString name () const

void setName (
const QString & name )

typedef QCString (* EncoderFn ) ( const QString & fileName )

typedef QString (* DecoderFn ) ( const QCString & localfileName )

bool exists () const

bool remove ()

virtual bool open ( int m )

bool open ( int m, FILE * f )

bool open ( int m, int f )

virtual void close ()

virtual void flush ()

virtual Offset size () const

virtual Offset at () const

virtual bool at ( Offset pos )

virtual bool atEnd () const

virtual Q_LONG readBlock (
char * p, Q_ULONG len )

virtual Q_LONG readLine ( char * p,
Q_ULONG maxlen )

Q_LONG readLine (
QString & s, Q_ULONG maxlen )

virtual int getch ()

virtual int putch ( int ch )

virtual int ungetch ( int ch )

int handle () const

静态公有成员

QCString encodeName (
const QString & fileName )

QString decodeName (
const QCString & localFileName )

void setEncodingFunction
( EncoderFn f )

void setDecodingFunction
( DecoderFn f )

bool exists (
const QString & fileName )

bool remove (
const QString & fileName )

重要的继承成员

virtual QByteArray readAll
()

详细描述
QFile类是一个操作文件的输入/输出设备。

QFile是用来读写二进制文件和文本文件的输入/输出设备。QFile可以自己单独被使用,但是如果和QDataStream或QTextStream一起使用将更加方便。
文件名通常可以通过构造函数来传递,但也可以使用setName()来设置。你可以通过exists()来检查一个文件是否存在并且可以通过remove()来移去一个文件。
文件可以用open()来打开、用close()来关闭、用flush()来刷新。数据通常可以使用QDataStream或者QTextStream进行读写,但你也可以使用readBlock()和readLine()来读,使用writeBlock()来写。QFile也支持getch()、 ungetch()和putch()。
size()可以返回文件的大小。你可以通过使用at()函数得到当前文件位置或者移到一个新的文件位置。如果你到了文件的末尾,atEnd()返回真。handle()返回文件句柄。
这里是一个使用QTextStream来一行一行地读取一个文本文件的代码段。它会把每一行带上一个行号打印出来。
QStringList lines;
QFile file( "file.txt" );
if ( file.open( IO_ReadOnly ) )
QTextStream stream( &file );
QString line;
int n = 1;
while ( !stream.eof() )
line = stream.readLine(); // 不包括“\n”的一行文本
printf( "%3d: %s\n", n++, line.latin1() );
lines += line;

file.close();


写文本也很容易(假设我们有一个行的字符串列表要写):
QFile file( "file.txt" );
if ( file.open( IO_WriteOnly ) )
QTextStream stream( &file );
for ( QStringList::Iterator it = lines.begin(); it != lines.end(); ++it )
stream << *it << "\n";
file.close();


QFileInfo类控制文件的详细信息,比如访问权限、文件日期和文件类型。
QDir类管理目录和文件名列表。
Qt使用Unicode文件名。如果你想在Unix系统上使用你自己的输入/输出,你可以使用encodeName()(和decodeName())来把文件名转换为本地编码。

也可以参考QDataStream、QTextStream和输入/输出和网络。本回答被提问者和网友采纳

如何从 QFile 获取字节数?

【中文标题】如何从 QFile 获取字节数?【英文标题】:How to get number of bytes from QFile? 【发布时间】:2011-08-31 15:38:46 【问题描述】:

我有这个代码:

int *size1 = new int();
int *size2 = new int();
QFile* file = new QFile("C:/Temp/tf.txt");
file->open(QFile::WriteOnly | QFile::Truncate);
file->write(str);
    *size1 = file->size();
file->close();
file->open(QFile::WriteOnly | QFile::Truncate);
file->write(strC);
    *size2 = file->size();
file->close();
delete file;
if (size1 < size2)

    return true;

else

    return false;

delete size1;
delete size2;

我想比较文件中的字节。但它比较文件中的符号数量。

【问题讨论】:

【参考方案1】:

根据Qt's docs:

qint64 QFile::size () const [虚拟]

从 QIODevice::size() 重新实现。

返回文件的大小。

对于 Unix 上的常规空文件(例如 /proc 中的那些),此函数返回 0;此类文件的内容是响应您调用 read() 按需生成的。

它确实返回字节数,而不是字符数(我假设这就是您所说的“符号”的意思。请注意,size() 返回的是 qint64,而不是 int。

如果您使用 qint64,您的代码应该可以正常工作。

另外,你为什么使用 int 指针?这样做没有任何好处,只需在堆栈上创建即可:

qint64 size1 = 0;

qint64 size2 = 0;

【讨论】:

【参考方案2】:

请记住,当您将字符写入文件时,它可能会是一个字节,无论如何大部分都是。

#include <QtCore/QCoreApplication>
#include <QFile>
#include <QDebug>

int main(int argc, char *argv[])

    QCoreApplication a(argc, argv);
    char *str = "Hello";

    char *strC = "Hello again!";
    qint64 size1;
    qint64 size2;
    QFile* file = new QFile("/home/nick/tf.txt");
    file->open(QFile::WriteOnly | QFile::Truncate);
    file->write(str);

    size1 = file->size();

    file->close();
    file->open(QFile::WriteOnly | QFile::Truncate);
    file->write(strC);

    size2 = file->size();

    file->close();
    delete file;

    QString num1 = QString::number(size1);
    QString num2 = QString::number(size2);
    if (size1 < size2)
    
        qDebug() << "Returning true";
        qDebug() << "Size 1 is: " + num1;
        qDebug() << "Size 2 is: " + num2;
        return true;
    
    else
    
        return false;
    

    return a.exec();

稍微修改了您的代码。这会产生:

Returning true 
"Size 1 is: 5" 
"Size 2 is: 12"

查看文件大小如何匹配字符数?每个字符都是一个字节,这就是为什么它看起来像是对字符进行计数的原因。

【讨论】:

【参考方案3】:

还有——比较

if (size1 < size2)

    return true;

不会按照你的想法去做,它会比较 ptr 地址。你可能想要...

if (*size1 < *size2)

    return true;

但正如幸运卢克所说,没有理由将这些放在堆上。

【讨论】:

以上是关于如何从gamit的qfile中获取时间序列的主要内容,如果未能解决你的问题,请参考以下文章

qfile获取文件第一行

Qt:如何打印 QFile?

Qt,QFile 写入特定行

Ubuntu14下Gamit安装

如何从 QFile 中读取?它显示该文件不可访问

从不同线程中的 QFile 读取