
C语言和C++读写文件操作汇总
目录C语言读文件常用操作方式一:用 feof()判断结束条件方式二:用 EOF判断结束条件方式三:另一种用 EOF判断结束条件方式四:用fscanf()按格式读入C语言写文件常用操作方式一:用fputc()方法方式二:用 fprintf()格式化输出C++读写文件常用操作C语言读文件常用操作方式一:用 feof()判断结束条件(首种方式列出完整代码。后面几种方式只写文件操作的核心代码)案例:读取t
目录
C语言读文件常用操作
方式一:用 feof()判断结束条件
(首种方式列出完整代码。后面几种方式只写文件操作的核心代码)
案例:读取test1.txt文件内容并在控制台输出
#include<stdio.h>
int main(int argc, char* argv[] ){
FILE *f;
f = fopen("test1.txt", "r"); //以只读的方式打开filename.txt
char c;
//方式一:用 feof()判断结束条件
if(f != NULL)
{
while(!feof(f))
printf("%c", fgetc(f));
}
else
printf("Fail to open! \n");
fclose(f); //关闭文件流
return 0;
}
这里有三个函数需要注意一下:
fopen():读取文件
C 库函数 FILE *fopen(const char *filename, const char *mode) 使用给定的模式 mode 打开 filename 所指向的文件。filename – 这是 C 字符串,包含了要打开的文件名称。
mode – 这是 C 字符串,包含了文件访问模式,模式如下:
模式标志 | 描述 |
---|---|
“r” | 打开一个用于读取的文件。该文件必须存在。 |
“w” | 创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有文件的内容,文件被视为一个新的空文件。 |
“a” | 追加到一个文件。写操作向文件末尾追加数据。如果文件不存在,则创建文件。 |
“r+” | 打开一个用于更新的文件,可读取也可写入。该文件必须存在。 |
“w+” | 创建一个用于读写的空文件。 |
“a+” | 打开一个用于读取和追加的文件。 |
该函数返回一个 FILE 指针。否则返回 NULL,且设置全局变量 errno 来标识错误。
feof():功能是检测流上的文件结束符,如果文件结束:返回非0值;如果文件未结束:返回0值。
C 库函数 int feof(FILE *stream) 测试给定流 stream 的文件结束标识符。stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
当设置了与流关联的文件结束标识符时,该函数返回一个非零值,否则返回零。
fgetc()::从文件指针指定的文件中读入一个字符.
int fgetc(FILE *stream) 从指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动。stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了要在上面执行操作的流。该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。
方式二:用 EOF判断结束条件
if(f != NULL)
{
c = fgetc(f);
while(c != EOF)
{
putchar(c);
c = fgetc(f);
}
}
else
printf("Fail to open! \n");
fclose(f);
注意putchar()函数:
C 库函数 int putchar(int char) 把参数 char 指定的字符(一个无符号字符)写入到标准输出 stdout 中。char – 这是要被写入的字符。该字符以其对应的 int 值进行传递。该函数以无符号 char 强制转换为 int 的形式返回写入的字符,如果发生错误则返回 EOF。
方式三:另一种用 EOF判断结束条件
if((f = fopen("test1.txt", "r")) != NULL)
while((c = fgetc(f)) != EOF)
putchar(c);
else
printf("Fail to open! \n");
fclose(f);
方式四:用fscanf()按格式读入
(见写入文件方法二)
C语言写文件常用操作
案例:将“Hello, world!”写入到test2.txt文件中。
方式一:用fputc()方法
C 库函数 int fputc(int char, FILE *stream) 把参数 char 指定的字符(一个无符号字符)写入到指定的流 stream 中,并char – 这是要被写入的字符。该字符以其对应的 int 值进行传递。
stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符的流。把位置标识符往前移动。
如果没有发生错误,则返回被写入的字符。如果发生错误,则返回 EOF,并设置错误标识符。
#include<stdio.h>
#include<string.h>
int main(int argc, char* argv[] ){
FILE *fp;
char s[30] = "Hello, world!";
if((fp = fopen("test2.txt", "w")) == NULL)
printf("Fail to open! \n");
else{
int i;
for(i = 0; i < strlen(s); i++)
{
fputc(s[i], fp);
}
fputc('\n', fp);
}
fclose(fp);
return 0;
}
方式二:用 fprintf()格式化输出
C 库函数 int fprintf(FILE *stream, const char *format, …) 发送格式化输出到流 stream 中。参数
stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
format – 这是 C 字符串,包含了要被写入到流 stream 中的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。format 标签属性是 %[flags][width][.precision][length]specifier,具体讲解如下:
specifier(说明符) 输出
c 字符
d 或 i 有符号十进制整数
e 使用 e 字符的科学科学记数法(尾数和指数)
E 使用 E 字符的科学科学记数法(尾数和指数)
f 十进制浮点数
g 自动选择 %e 或 %f 中合适的表示法
G 自动选择 %E 或 %f 中合适的表示法
o 有符号八进制
s 字符的字符串
u 无符号十进制整数
x 无符号十六进制整数
X 无符号十六进制整数(大写字母)
p 指针地址
n 无输出
% 字符
如果成功,则返回写入的字符总数,否则返回一个负数。
int a = 100;
char s[30] = "Hello, world!";
char c = 'T';
FILE *fp;
if((fp = fopen("test2.txt", "w+")) == NULL)
printf("Fail to open! \n");
else
fprintf(fp, "%d, %s, %c", a, s, c); //将数据格式化输出到文件test2.txt中
fscanf(fp, "%d, %s, %c", &a, &s, &c); //从文件中格式化读取数据
printf("%d, %s, %c \n", a, s, c); //格式化输出到屏幕
fclose(fp);
return 0;
C++读写文件常用操作
C++ 中标准库 fstream,它定义了三个新的数据类型:
ofstream 该数据类型表示输出文件流,用于创建文件并向文件写入信息。
ifstream 该数据类型表示输入文件流,用于从文件读取信息。
fstream 该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。在从文件读取信息或者向文件写入信息之前,必须先打开文件。ofstream 和 fstream 对象都可以用来打开文件进行写操作,如果只需要打开文件进行读操作,则使用 ifstream 对象。
下面是 open() 函数的标准语法,open() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。
void open(const char *filename, ios::openmode mode);
在这里,open() 成员函数的第一参数指定要打开的文件的名称和位置,第二个参数定义文件被打开的模式。
模式标志 | 描述 |
---|---|
ios::ate | 文件打开后定位到文件末尾。 |
ios::in | 打开文件用于读取。 |
ios::out | 打开文件用于写入。 |
ios::trunc | 如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。 |
#include <iostream>
#include<cstring>
#include<fstream>
using namespace std;
int main(void){
ifstream input;
input.open("test1.txt", ios::in);
if(!input){
cout<<"文件不存在"<<endl;
exit(1);
}
if(input.peek()==EOF){
cout<<"文件为空"<<endl;
}
while(!input.eof()){//防止多读一行,可以用.peek()!=EOF;//作为循环条件,重新打开后,从头读取
string str;
getline(input,str);
cout<<str<<endl;
}
input.close();
ofstream myfile;
myfile.open("test2.txt", ios::out | ios::trunc );//以写入模式打开文件,并希望截断文件,以防文件已存在
myfile<<"Hello, world!"<<endl;//使用时完全同cout可以用setw控制
myfile.close();
myfile.open("test2.txt",ios_base::app); //追加模式。所有写入都追加到文件末尾。
myfile<<"Hi!"<<endl;
myfile.close();
return 0;
}
打开test2.txt文件可以看到如下内容:
更多推荐
所有评论(0)