FILE * 是文件指针类型
stdio.h中,stdin stdout stderr 可以当做文件来用
操作系统的三个管道
stdin 标准输入 从控制台读
stdout 标准输出
stderr 错误输出
打开文件
FILE * file = fopen(“文件的路径”,“用于描述读写的mode”)
返回的是文件指针 如果文件不存在 会得到NULL
fopen(“c:\xxx\xxx\xx.txt”,“r”)
| mode | 说明 |
|---|---|
| r | 打开一个已有的文本文件,允许读取文件。 |
| w | 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。 |
| a | 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。 |
| r+ | 打开一个文本文件,允许读写文件。 |
| w+ | 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。 |
| a+ | 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式 |
| “rb”, “wb”, “ab”, “rb+”, “r+b”, “wb+”, “w+b”, “ab+”, “a+b” | binary 操作 |
文件操作:
int fgetc( FILE * fp ); fgetc() 函数从 fp 所指向的输入文件中读取一个字符。返回值是读取的字符,如果发生错误则返回 EOF,
int getc( FILE *stream ); 宏方式
char *fgets(char s[], int size, FILE * stream); 读一行
最多读size-1个字符 因为还有个’\0’
如果真的读了一行 末尾的\n也会读进来
和gets的区别: gets读一行 末尾的换行符会被替换为\0
如果读到EOF(-1) 文件尾
wchar_t *fgetws(wchar_t * restrict s, int n, FILE * restrict stream);
如果处理非英文字符 比如中文等字符 wchar_t
int fscanf(FILE * stream, char * format, addr1,addr2…);
参考 scanf
文件指针中有一个表示位置的值 随着读或写 值会变
long int ftell(FILE *stream) 得到文件指针中存储的位置值
feof(文件指针) 1 0 判断是否到了结尾
int fseek(FILE *stream, long offset, int fromwhere);
fromwhere:
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
int fputc( int c, FILE *fp );
fputs 参照 puts , fputs(str,stdout) 与 puts(str) 等价
fprintf(文件指针,格式化字符串,表达式列表)
fprintf 参考printf
size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);
size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);
ferror(文件指针) 判断有无错误
clearerr(文件指针) 清除错误状态
perror(“错误信息前缀”) 打印错误信息 使用stderr,打印的信息默认使用 提供的前缀
int fflush(FILE *stream)
写文件的时候 先写到缓存中 当缓存满了的时候 再从缓存中一次性写入文件中 能提高写文件效率
fclose(文件指针) 会自动flush
#include
int main(int arg_count, char* arg_values[])
{
char * file_path = "lab.c";
FILE * file = fopen(file_path,"r");
if(file==NULL){
perror("ERROR");
return 1;
}
char arr[200];
while( !feof(file) ){
fscanf(file,"%*[^a-zA-Z]%[a-zA-Z]",arr);
printf("%s",arr);
}
fclose(file);
return 0;
}
如果文件不存在 会打印:
ERROR: No such file or directory
参考:
菜鸟教程