前述:文件操作只需熟悉掌握流程,熟悉各函数,熟悉操作即可
一些基本概念:
1.数据文件分类:
一般就两种
一种是二进制文件,数据以二进制形式存储
另一种是文本文件以ASCII码形式存储的文件
2.数据流:
所谓数据流就是程序的数据流动通过流实现,我们想要读取数据或者输入数据需要打开对应的流,,和确定方向
stdin:标准输入流--scanf
stdout:标准输出流--printf
stderr:标准错误流,一般直接输出到屏幕上
三个流指针类型都是FILE*,通常称为文件指针
3.打开方式:
掌握几种(其他的可以自行了解)
w:只写,若是打开的不存在可以默认创建--注意以"w"打开会直接覆盖原文件内容
r:只读,打开不存在会报错
wb:针对二进制
rb:针对二进制
a:追加
基本代码逻辑:
打开文件
...操作
关闭文件
4.也可以向输出流stdout中写入数据,会直接输出在屏幕上
File* pf = fopen("text.txt","w");
if(pf == NULL)
{
perror("fopen");
return 1;
}
...
fclose(pf);
pf = NULL;
5.printf(a);a是字符数组名,可以不用格式化直接打印
Function
1.fwrite
size_t fwrite(const void* ptr,size_t size,size_t count,FILE* stream)
返回值是成功写入的元素个数整数
参数:
ptr : 指向被写的元素地址
size:被写的元素尺寸大小
count:被写入的元素个数
stream:文件流
2.fopen
FILE * fopen ( const char * filename, const char * mode )
返回值是指向打开的文件的指针;
参数:
filename:想要打开的文件名称
mode:打开文件的方式
3.fclose
int fclose ( FILE * stream )
返回值:
成功关闭流则返回0
关闭失败则返回EOF(-1)
4.fprintf
int fprintf ( FILE * stream, const char * format, ... );--按照格式要求把字符串写入流
返回值:
成功则返回成功写入的元素个数
失败则返回一个负数
5.fgetc
int fgetc ( FILE * stream );--读取光标此时的位置的字符
返回值:
读到文件末尾或者读取失败返回EOF
成功返回该字符的ASCII值
6.fputs
int fputs ( const char * str, FILE * stream );
返回值:成功返回一个非负数,失败返回EOF.
7.fgets()
char * fgets ( char * str, int num, FILE * stream );
返回读取的字符串的地址
8.fputc()
int fputc ( int character, FILE * stream );
写入成功返回ASCII码值
失败EOF
9.fread()
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
从流里读取一整块数据进入数组
10.fwrite()
用法和fread一样
调整文件指针位置三个函数:
1.fseek()
int fseek ( FILE * stream, long int offset, int origin );
origin有三个值,
SEEK_SET文件开头
SEEK_CUR光标此时的位置
SEEK_END文件末尾
offset是偏移量
2.ftell()返回文件指针想对于起始位置的偏移量
long int ftell ( FILE * stream )
3.void rewind ( FILE * stream );让文件指针回到起始位置
sscanf-流是字符串
fscanf-流可以是文本流也可以是标准格式流
sprintf,fprintf也是一样
以下是一些主播的测试代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//int main()
//{
// int a = 0;
// FILE* pf = fopen("text1.txt", "r");
// if (pf == NULL)
// {
// perror("fpoen");
// return 1;
// }
//
// while ((a = getc(pf)) != EOF )
// {
//
// printf("%c", a);
// }
//
// fclose(pf);
// pf = NULL;
// return 0;
//}
//int main()
//{
// FILE* pf = fopen("text2.txt", "w");
// if(pf == NULL)
// {
// perror("fopen");
// return 1;
// }
// fputs("123456789", pf);
// fseek(pf, -3, SEEK_END);
// fputs("a", pf);
// fclose(pf);
// pf = NULL;
//
// return 0;
//}
//int main()
//{
// FILE* pf = fopen("text2.txt", "r");
// if (pf == NULL)
// {
// perror("fopen");
// }
// fseek(pf, -1, SEEK_END);
// int size = ftell(pf);
// printf("%d", size);
// fputs("wo shi ni die", stdout);
// fclose(pf);
// pf = NULL;
// return 0;
//}
//int main()
//{
// char a[10] = {0};
// FILE* pf = fopen("text1.txt", "r");
// if (pf = NULL)
// {
// perror("fopen:");
// }
// fgets(a, 5, pf);
// /*fprintf(stdout, "%c", a);*/
// fclose(pf);
// pf = NULL;
// return 0;
//}
int main()
{
FILE* pf = fopen("text1.txt", "w");
if (pf == NULL)
{
perror("fopen");
return 1;
}
char a[10] = "123456";
fwrite(a, 1, 6, pf);
fread(a, 1, 6, stdin);
fprintf(stdout, "%s\n", a);
printf(a);
fclose(pf);
pf = NULL;
return 0;
}
1万+

被折叠的 条评论
为什么被折叠?



