目录
[四、windows api文件读写](#四、windows api文件读写)
一、前言
我们在学习过程中,学到的最多的感觉就是文件操作了,从学习c语言、c++再到Qt,都有它的影子,文件读写操作的方式有所不同,但都有各自的特点和用途。现在我总结了这五种写法,下面分别简要介绍这些环境下的文件读写操作方式。
二、c语言文件读写
在C语言它是面向过程的语言,文件操作主要通过一系列标准库函数实现,例如**fopen(), fread(), fwrite(), fclose()**等等。下面代码为示例,比较简单。
其中重点需要记住 fopen()函数,它的原型为:
FILE *fopen(const char *filename, const char *mode);
fopen
函数的第二个参数 mode
是一个字符串,用于指定文件的打开模式。常用的有 "r" (以只读方式打开文件,文件必须存在), "w" (以只写方式打开文件。如果文件存在,则长度被截断为零,即该文件内容会消失,如果文件不存在则创建新文件),"a" , "r+",等等。
1.写文件
示例代码为:
cpp
// 1.打开文件
FILE* pfile = fopen("1.txt","W");
if (pfile == NULL)
{
MessageBox("fopen error");
return;
}
char szBuf[1024] = "C语言写文件";
// 2.写文件
fprintf(pfile,szBuf);
// 3.关闭文件
fclose(pfile);
2.读文件
示例代码为:
cs
// 1.打开文件
FILE* pfile = fopen("1.txt","r");
if (pfile == NULL)
{
MessageBox("fopen error");
printf("fopen error!");
return;
}
char readBuf[1024] = { 0 };
// 2.读文件
fread(readBuf, 1, 1024, pfile);
// 3.关闭文件
printf("结果为:%s", readBuf);
三、c++文件读写
c++是面向对象的语言,所以说会创建一个文件流fstream 类,包括ifstream
(输入文件流)、ofstream
(输出文件流)和fstream
(同时支持输入输出的文件流)。
1.写文件
示例代码为:
cpp
// 1. 创建文件流
ofstream ofs("2.txt");
char szBuf[1024] = "c++写文件";
// 2. 写文件
ofs.write(szBuf,strlen(szBuf) + 1);
// 3. 关闭文件
ofs.close();
2.读文件
示例代码为:
cpp
// 1. 创建文件流
ifstream ifs("2.txt");
char szBuf[1024] = { 0 };
// 2. 读文件
ifs.read(szBuf, 1024);
// 3. 关闭文件
ifs.close();
std::cout << szBuf << std::endl;
四、windows api文件读写
Windows API 文件读写就要比较复杂了,Windows API提供了底层的文件操作函数,如CreateFile()
, ReadFile()
, WriteFile()
, CloseHandle()
等。CreateFile : 用于打开或创建文件、管道、邮件槽、通信设备等,并返回一个句柄,ReadFile 和WriteFile : 分别用于从文件句柄指向的文件中读取数据和向文件写入数据。**CloseHandle :**关闭一个打开对象的句柄。
我们大家都知道学习Windows系统比较难,主要因为是 API 用的都是自己封装的数据类型,学习过程中需要不断查阅文档和 API 原型。还一个主要原因是函数api的参数非常的多,有的甚至有十几个。。。。
1.写文件
示例代码为:
cpp
HANDLE hFile;
// 1. 创建文件
hFile = CreateFile("3.txt", GENERIC_WRITE, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
printf("CreateFile Error");
return;
}
// 2. 写文件
char szBuf[1024] = "window api 写文件";
DWORD dwWrites;
WriteFile(hFile, szBuf, strlen(szBuf) + 1, &dwWrites, NULL);
CloseHandle(hFile);
2.读文件
示例代码为:
cpp
HANDLE hFile;
hFile = CreateFile("3.txt", GENERIC_READ, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
MessageBox("CreateFile Error");
return;
}
// 2. 读文件
char szBuf[1024] = { 0 };
DWORD dwWrites;
if (!ReadFile(hFile, szBuf, 1024, &dwWrites, NULL))
{
MessageBox("ReadFile Error");
return;
}
printf("结果为: %s",szBuf);
CloseHandle(hFile);
五、MFC文件读写
MFC就很简单了,写法上几乎和c++语法一样。
1.写文件
示例代码为:
cpp
CFile file("4.txt",CFile::modeCreate | CFile::modeWrite);
char szBuf[1024] = "MFC写文件";
file.Write(szBuf, strlen(szBuf) + 1);
file.Close();
2.读文件
示例代码为:
cpp
CFile file("4.txt", CFile::modeRead);
char szBuf[1024] = { 0 };
file.Read(szBuf, file.GetLength());
file.Close();
MessageBox(szBuf);
六、Qt文件读写
在Qt中,读写文件是一个常见的操作,可以通过多种方式实现,但最常用和最直接的方法是使用QFile
和QTextStream
类,或者使用QFile
与QDataStream
类进行二进制数据的读写。
1.写文件
示例代码为:
cpp
QFile file("5.txt");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
qDebug() << "无法打开文件写入";
return;
}
QTextStream out(&file);
out << "Qt写文件\n";
file.close();
2.读文件
示例代码为:
cpp
QFile file("5.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
qDebug() << "无法打开文件读取";
return;
}
QTextStream in(&file);
QString line;
while (!in.atEnd()) {
line = in.readLine();
qDebug() << line;
}
file.close();
七、总结
以上就是读写文件的所有示例写法了,虽然在语法上面都各不相同,但是在具体实现基本上都一样。都是按照三个步骤来实现,创建文件,读写文件,关闭文件,这些都不要求全部掌握,重要的理解斌且掌握这种代码思想。