c/c++、MATLAB读写文件

目录

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 );

1 c语言读写文件

1.1 c语言写文件

写入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;
}

1.2 c语言读文件

读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;
}

2 c++读写文件

参考:C++ 文件和流 | 菜鸟教程

程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放,通过文件可以将数据持久化,C++中对文件操作需要包含头文件 < fstream >

文件类型分为两种:

  1. 文本文件 - 文件以文本的ASCII码形式存储在计算机中

  2. 二进制文件 - 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们

操作文件的三大类:

  1. ofstream:写操作

  2. ifstream: 读操作

  3. fstream : 读写操作

2.1 文本文件

2.1.1 写文件

写文件步骤如下:

  1. 包含头文件

    #include

  2. 创建流对象

    ofstream ofs;

  3. 打开文件

    ofs.open("文件路径",打开方式);

  4. 写数据

    ofs << "写入的数据";

  5. 关闭文件

    ofs.close();

文件打开方式:

打开方式 解释
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;
}

2.1.2 读文件

读文件步骤如下:

  1. 包含头文件

    #include

  2. 创建流对象

    ifstream ifs;

  3. 打开文件并判断文件是否打开成功

    ifs.open("文件路径",打开方式);

  4. 读数据

    四种方式读取

  5. 关闭文件

    ifs.close();

#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;
}

  

2.2 二进制文件,bin文件

以二进制的方式对文件进行读写操作

打开方式要指定为 ==ios::binary==

2.2.1 写文件

二进制方式写文件主要利用流对象调用成员函数write

函数原型 :ostream& write(const char * buffer,int len);

参数解释:字符指针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;
}

2.2.2 读文件

二进制方式读文件主要利用流对象调用成员函数read

函数原型:istream& read(char *buffer,int len);

参数解释:字符指针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;
}

3 MATLAB读写文件

3.1 MATLAB读文件

读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');

3.2 MATLAB写文件

输出到txt文件

fid = fopen('char.txt','a+'); 
for i=1:10
    fprintf(fid,'%.2f\n',data(i));
end

fprintf(fid,'-----------------------------------------------\n'); 

fclose(fid);

你可能感兴趣的:(7.,c/c++,4.,matlab,matlab,c语言,c++)