文件操作:
FILE* buffer = fopen("filename",mode);
fopen_s() FILE* 文件名: "BusInfo.dat"
打开方式:1.文本模式:
r 打开只读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。
rb+ 读写打开一个二进制文件,只允许读写数据。
rt+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文
件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该 文件,如果文件存在,写入的数据会被加到文件尾后,即文
件原先的内容会被保留。(原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
wt+ 读写打开或着建立一个文本文件;允许读写。
at+ 读写打开一个文本文件,允许读或在文本末追加数据。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
2.二进制: "rb","wb","ab"格式与前面相同,只是使用二进制模式而非文本模式打开。
区别: 文本模式是操作系统在人和二进制之间做了一层转义。
回车符"\r\n" 解释成"\n"(读出时),将"\n"解释成"\r\n"(写入时)
二进制模式:文件本身的内容和你编写程序时用函数读到的内容完全相同。
简单的文件I/O
要让程序写入文件,必须这样做:
1.创建一个ofstream对象来管理输出流
2.将该对象与特定的文件关联起来。
3.以使用cout的方式使用该对象,唯一的区别是输出将进入文件,而不是屏幕。
要完成包含头文件fstream。对大多数(但不是全部)实现来说,包含该文件使自动包括iostream。
ofstream fout;
接下来,必须将这个对象与特定的文件关联起来。为此,可以使用open()方法。例如,假设要打开文件jar.txt进行
输出,则可以这样做:
fout.open("jar.txt");
也可以使用另一个构造函数将这两步(合并成一条语句):
ofstream fout("jar.txt");
fout << "Dull Data";
由于ostream是ofstream类的基类。因此可以使用所有的ostream方法,包括各种插入运算符定义,格式化方法和控制符。
ofstream类使用被缓冲的输出,因此程序在创建像fout这样的ofstrcam对象时,将为输出缓冲区分配空间。
以这种方式打开文件来进行输出时,如果没有这样的文件,将创建一个新文件;如果有这样的文件,则打开文件将清空文件,输出将进入到一个
空文件中。
读取文件的要求与写入文件相似;
将该对象与特定的文件关联起来;
以使用cin的方式使用该对象。
ifstream fin;
fin.open("jellyjar.txt");
ifstream fis("jamjar.txt");
char ch;
fin >> ch;
char buf[80];
fin >> buf;
fin.getline(buf,80);
string line;
getline(fin,line);
当输入和输出流对象过期时,到文件的连接将自动关闭。另外,也可以使用close()方法来显示地关闭文件。
fout.close();
fin.close();
关闭遮掩的连接并不会删除流,而只是断开流到文件的连接。然而,流管理装置仍被保留。
17.4.4 命令行处理技术
文件处理程序通常使用命令行参数来指定文件。命令行参数是用户在输入命令时,在命令行中输入的参数。
例如,要在UNIX或Linux系统中计算文件包含的字数,可以在命令行提示符下输入下面的命令:
wc report1 report2 report3
其中 wc 是程序名,report1 report2 和report3是作为命令行参数传递给程序的文件名。
fgets(char* ,nLength,FILE*);
一次读一行
参数1:自己的缓冲区
参数2:缓冲区大小
参数3:文件的缓冲区
fread(char*,2,3,FILE*); 读
fwrite(char*,2,3,FILE*); 写
fclose(FILE*); 关闭文件,没写的话,内存泄漏,内容没写进去
buffer = NULL 防止野指针, 使用前 if(NULL == buffer)
FILE* buffer = fopen("filename",mode);
fopen_s() FILE* 文件名: "BusInfo.dat"
打开方式:1.文本模式:
r 打开只读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。
rb+ 读写打开一个二进制文件,只允许读写数据。
rt+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文
件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该 文件,如果文件存在,写入的数据会被加到文件尾后,即文
件原先的内容会被保留。(原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
wt+ 读写打开或着建立一个文本文件;允许读写。
at+ 读写打开一个文本文件,允许读或在文本末追加数据。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
2.二进制: "rb","wb","ab"格式与前面相同,只是使用二进制模式而非文本模式打开。
区别: 文本模式是操作系统在人和二进制之间做了一层转义。
回车符"\r\n" 解释成"\n"(读出时),将"\n"解释成"\r\n"(写入时)
二进制模式:文件本身的内容和你编写程序时用函数读到的内容完全相同。
简单的文件I/O
要让程序写入文件,必须这样做:
1.创建一个ofstream对象来管理输出流
2.将该对象与特定的文件关联起来。
3.以使用cout的方式使用该对象,唯一的区别是输出将进入文件,而不是屏幕。
要完成包含头文件fstream。对大多数(但不是全部)实现来说,包含该文件使自动包括iostream。
ofstream fout;
接下来,必须将这个对象与特定的文件关联起来。为此,可以使用open()方法。例如,假设要打开文件jar.txt进行
输出,则可以这样做:
fout.open("jar.txt");
也可以使用另一个构造函数将这两步(合并成一条语句):
ofstream fout("jar.txt");
fout << "Dull Data";
由于ostream是ofstream类的基类。因此可以使用所有的ostream方法,包括各种插入运算符定义,格式化方法和控制符。
ofstream类使用被缓冲的输出,因此程序在创建像fout这样的ofstrcam对象时,将为输出缓冲区分配空间。
以这种方式打开文件来进行输出时,如果没有这样的文件,将创建一个新文件;如果有这样的文件,则打开文件将清空文件,输出将进入到一个
空文件中。
读取文件的要求与写入文件相似;
将该对象与特定的文件关联起来;
以使用cin的方式使用该对象。
ifstream fin;
fin.open("jellyjar.txt");
ifstream fis("jamjar.txt");
char ch;
fin >> ch;
char buf[80];
fin >> buf;
fin.getline(buf,80);
string line;
getline(fin,line);
当输入和输出流对象过期时,到文件的连接将自动关闭。另外,也可以使用close()方法来显示地关闭文件。
fout.close();
fin.close();
关闭遮掩的连接并不会删除流,而只是断开流到文件的连接。然而,流管理装置仍被保留。
17.4.4 命令行处理技术
文件处理程序通常使用命令行参数来指定文件。命令行参数是用户在输入命令时,在命令行中输入的参数。
例如,要在UNIX或Linux系统中计算文件包含的字数,可以在命令行提示符下输入下面的命令:
wc report1 report2 report3
其中 wc 是程序名,report1 report2 和report3是作为命令行参数传递给程序的文件名。
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[])
{
string filename;
cout << "Enter name for new file: ";
cin >> filename;
ofstream fout(filename.c_str());
fout << "For your eyes only!\n";
cout << "Enter your secret number: ";
float secret;
cin >> secret;
fout << "Your secret number is " << secret <<endl;
fout.close();
ifstream fin(filename.c_str());
cout << "Here are the ontents of " << filename << ":\n";
char ch;
while(fin.get(ch))
cout << ch;
cout << "Done \n";
fin.close();
return 0;
return 0;
}
fgets(char* ,nLength,FILE*);
一次读一行
参数1:自己的缓冲区
参数2:缓冲区大小
参数3:文件的缓冲区
fread(char*,2,3,FILE*); 读
fwrite(char*,2,3,FILE*); 写
fclose(FILE*); 关闭文件,没写的话,内存泄漏,内容没写进去
buffer = NULL 防止野指针, 使用前 if(NULL == buffer)