目录
1 c语言读写文件
1.1 c语言写文件
1.2 c语言读文件
2 c++读写文件
2.1 文本文件
2.1.1 写文件
2.1.2 读文件
2.2 二进制文件,bin文件
2.2.1 写文件
2.2.2 读文件
3 MATLAB读写文件
3.1 MATLAB读文件
3.2 MATLAB写文件
引用参考:菜鸟教程
打开文件
使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE 的一个对象,类型 FILE 包含了所有用来控制流的必要的信息。下面是这个函数调用的原型:
FILE *fopen( const char * filename, const char * mode );在这里,filename 是字符串,用来命名文件,访问模式 mode 的值可以是下列值中的一个:
模式 描述 r 打开一个已有的文本文件,允许读取文件。 w 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。 a 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。 r+ 打开一个文本文件,允许读写文件。 w+ 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。 a+ 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。 如果处理的是二进制文件,则需使用下面的访问模式来取代上面的访问模式:
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"关闭文件
关闭文件,使用 fclose( ) 函数。函数的原型如下:
int fclose( FILE *fp );
写入txt文件
#include "stdlib.h"
#include
int saveDataToTXT(double y[], int length, const char* filePath) {
int i = 0;
FILE *fp;
fp = fopen(filePath, "wb"); //数据导出
if (fp == NULL)
{
printf("cant open the file");
exit(0);
}
for (i = 0; i
保存到bin文件
#include "stdlib.h"
#include
int saveDataToBin(int y[], int length, const char* filePath) {
int i = 0, j = 0;
FILE *fpwrite;
fpwrite = fopen(filePath, "wb"); //数据导出
if (fpwrite == NULL)
{
printf("cant open the file fpwrite");
exit(0);
}
int nwrite = 0;
nwrite = fwrite(y, sizeof(int), length, fpwrite);
if (nwrite == 0 && filePath != NULL) {
printf("write failed!");
}
fclose(fpwrite);
return 0;
}
int main()
{
const char* filePath = "test.bin";
int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
int length = 10;
saveDataToBin(a, length, filePath);
system("pause");
return 0;
}
读txt文件,读bin文件
#include "stdlib.h"
#include
//读bin文件
void read_bin(const char *path, int *buf, int size)
{
FILE *infile;
if((infile=fopen(path,"rb"))==NULL)
{
printf( "\nCan not open the path: %s \n", path);
exit(-1);
}
fread(buf, sizeof(int), size, infile);
fclose(infile);
}
//读txt文件
int readTXT(const char *filePath, int buf[], int length)
{
FILE *fpRead = fopen(filePath, "rb"); //读数据
if(fpRead == NULL)
{
printf("cant open the file fpRead");
exit(0);
}
for(int i = 0; i < length; i++)
{
fscanf(fpRead,"%d ", &buf[i]);
printf("%d\n",buf[i]);
}
return 0;
}
int main()
{
int i=0;
const char* filePath = "test.bin";
int a[10] = { 1,1,2,3,4,5,6,7,8,9 };
int b[10];
int length = 10;
//saveDataToTXT(a, length, filePath);
//readTXT(filePath, b, length);
saveDataToBin(a, length, filePath);
read_bin(filePath, b, 10);
for (i = 0; i < 10; i++)
{
printf("b[%d]=%d\n", i, b[i]);
}
system("pause");
return 0;
}
参考:C++ 文件和流 | 菜鸟教程
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放,通过文件可以将数据持久化,C++中对文件操作需要包含头文件 < fstream > 文件类型分为两种:
操作文件的三大类:
|
写文件步骤如下:
|
文件打开方式:
打开方式 | 解释 |
---|---|
ios::in | 为读文件而打开文件 |
ios::out | 为写文件而打开文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 追加方式写文件 |
ios::trunc | 如果文件存在先删除,再创建 |
ios::binary | 二进制方式 |
注意: 文件打开方式可以配合使用,利用|操作符
例如:用二进制方式写文件 ios::binary | ios:: out
#include
void test01()
{
ofstream ofs;
ofs.open("test.txt", ios::out);
ofs << "姓名:张三" << endl;
ofs << "性别:男" << endl;
ofs << "年龄:18" << endl;
ofs.close();
}
int main() {
test01();
system("pause");
return 0;
}
读文件步骤如下:
|
#include
#include
void test01()
{
ifstream ifs;
ifs.open("test.txt", ios::in);
if (!ifs.is_open())
{
cout << "文件打开失败" << endl;
return;
}
//第一种方式
//char buf[1024] = { 0 };
//while (ifs >> buf)
//{
// cout << buf << endl;
//}
//第二种
//char buf[1024] = { 0 };
//while (ifs.getline(buf,sizeof(buf)))
//{
// cout << buf << endl;
//}
//第三种
//string buf;
//while (getline(ifs, buf))
//{
// cout << buf << endl;
//}
char c;
while ((c = ifs.get()) != EOF)
{
cout << c;
}
ifs.close();
}
int main() {
test01();
system("pause");
return 0;
}
以二进制的方式对文件进行读写操作
打开方式要指定为 ==ios::binary==
二进制方式写文件主要利用流对象调用成员函数write 函数原型 : 参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数 |
#include
#include
class Person
{
public:
char m_Name[64];
int m_Age;
};
//二进制文件 写文件
void test01()
{
//1、包含头文件
//2、创建输出流对象
ofstream ofs("person.txt", ios::out | ios::binary);
//3、打开文件
//ofs.open("person.txt", ios::out | ios::binary);
Person p = {"张三" , 18};
//4、写文件
ofs.write((const char *)&p, sizeof(p));
//5、关闭文件
ofs.close();
}
int main() {
test01();
system("pause");
return 0;
}
二进制方式读文件主要利用流对象调用成员函数read 函数原型: 参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数 |
#include
#include
class Person
{
public:
char m_Name[64];
int m_Age;
};
void test01()
{
ifstream ifs("person.txt", ios::in | ios::binary);
if (!ifs.is_open())
{
cout << "文件打开失败" << endl;
}
Person p;
ifs.read((char *)&p, sizeof(p));
cout << "姓名: " << p.m_Name << " 年龄: " << p.m_Age << endl;
}
int main() {
test01();
system("pause");
return 0;
}
读bin文件
bin文件存储方式: big endian: 大尾端,也称大端(高位)优先存储。 little endian:小尾端,也称小端(低位)优先存储。 如下00000000 00000000 00000000 00000001的存储 大尾端: 00000000 00000000 00000000 00000001 addr+0 addr+1 addr+2 addr+3 //先存高有效位(在低地址),即低地址存高位 小尾端: 00000001 00000000 00000000 00000000 addr+0 addr+1 addr+2 addr+3 //先存低有效位(在低地址),即低地址存低位 |
fid = fopen('rx_data.bin');
if fid==-1
fprintf('file open error!\n');
return;
end
//加入bin文件中存放的数据类型是int16
data = fread(fid, 900, 'int16');//读取900个int16数据,
//data = fread(fid, 'int16'); //一次性读取
//data = fread(fid, 'int32', 'ieee-be');//小尾端读
读txt文件
data=load('data.txt');
输出到txt文件
fid = fopen('char.txt','a+');
for i=1:10
fprintf(fid,'%.2f\n',data(i));
end
fprintf(fid,'-----------------------------------------------\n');
fclose(fid);