您的位置:首页 > 编程语言 > Qt开发

[Qt] Qt文件操作 [2013-08-13更新]

2013-08-13 08:17 302 查看
- 经验总结

1. 直接访问模式在输入/输出的块操作使用4千字节或更大的情况下使用最好。

2. 当每次读小量数据时,缓存访问工作的更好。

3. 重要:当使用缓存的文件工作时,数据没有被立刻写到文件中。调用flush()可以确保数据被真正地写完。 

4. 警告:如果你有一个缓存文件以同时读写方式打开,你不要在一次输入操作之后立即输出,反之亦然。你必须在输入和输出操作之间调用flush()或者一次文件定位操作,比如seek(),否则缓存中可能会包含无用信息。 

5. 如果文件不存在并且指定IO_WriteOnly或IO_ReadWrite时,文件将被创建。

- 基本操作

#include <QFile>

#include <QTextStream>

QFile file("/../filename");

- 读文件

功能:把文件的内容读取到fileContent

if ( file.open(QIODevice::ReadOnly ) )
{
    QTextStream stream( &file );
    QString fileContent;
    QString line;
    while ( !stream.atEnd() )
    {
        line = stream.readLine();           // 不包括“n”的一行文本
        fileContent.append(line).append("\n");
    }
    file.close();
}

QStringList lines;
if ( file.open(QIODevice::ReadOnly ) )
{
    QTextStream stream( &file );
    QString line;
    int n = 1;
    while ( !stream.atEnd() )
    {
        line = stream.readLine();      // 不包括“n”的一行文本
        //printf( "%3d: %sn", n++, line.toLatin1() );
        lines += line;
    }
    file.close();
}

-------------------------------------------------------------------------

- 写文件

功能:将strtmp的内容写入文件

if ( file.open( IO_WriteOnly ) )  // QIODevice::WriteOnly
{
    QTextStream stream( &file );
    stream << strtmp << "\n";
    file.close();
}

QStringList lines;
if ( file.open( IO_WriteOnly ) )
{
    QTextStream stream( &file );
    for ( QStringList::Iterator it = lines.begin(); it != lines.end(); ++it )
    {
        stream << *it << "\n";
    }
    file.close();
}

-------------------------------------------------------------------------

- 删除文件

QFile::remove("/.../fileName");

- 文件打开方式

#define IO_ReadOnly      QIODevice::ReadOnly

#define IO_WriteOnly     QIODevice::WriteOnly

#define IO_ReadWrite     QIODevice::ReadWrite

#define IO_Append        QIODevice::Append

#define IO_Truncate      QIODevice::Truncate

#define IO_Translate     QIODevice::Text

#define IO_ModeMask      0x00FF

IO_Raw                   指定直接的(非缓存的)文件访问

IO_ReadOnly              以只读模式打开文件

IO_WriteOnly             以只写模式(并且截短)打开文件

IO_ReadWrite             以读/写模式打开文件,等于(IO_ReadOnly | IO_WriteOnly)

IO_Append                以附加的模式打开文件(当你想向日志文件写些东西时这个模式非常有用)

                         文件索引被设置到文件末尾,使用while循环遍历文件时需重置文件索引

                         注意如果你在附加模式中使用at()定位文件索引,结果将为定义的

IO_Truncate              截短文件

IO_Translate             在MS-DOS、Windows和OS/2下对文本文件翻译回车和换行

- 判断文件或目录是否存在

#include <QFileInfo>

QFile file("...");

QFileInfo fileInfo(file);

or

QFileInfo fileInfo;

fileInfo.setFile(filePath);

bool QFileInfo::exists () const

Returns true if the file exists; otherwise returns false.

bool QFileInfo::isDir () const

Returns true if this object points to a directory or to a symbolic link to a directory; otherwise returns false.

- 打开指定的文件夹

QDesktopServices::openUrl(QUrl("file:///C:/Documents and Settings/All Users/"));

- 遍历某个目录下的文件

#include <QDir>

QDir dir;

dir.cd("/directory");                 // 指定目录

dir.setFilter(QDir::Files);           // 过滤器

dir.setSorting(QDir::Name);           // 排序依据(此处为按名称排序)

QFileInfoList list = dir.entryInfoList();

for (int i = 0; i < list.size(); ++i)

{

    QFileInfo fileInfo = list.at(i);

    fileInfo.fileName()               // 获取文件名

    fileInfo.size()                   // 获取文件大小

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: