如何从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中获取时间序列的主要内容,如果未能解决你的问题,请参考以下文章