cd .文件io
man fopen
FILE *fopen(const char *path, const char *mode);
例句:
第一个参数:表示文件路径
绝对路径:根目录 \
相对路径:当前的目录 .
第二个参数:表示操作文件的模式
DESCRIPTION 函数说明
RETURN VALUE 返回值:
失败:NULL
成功:!=NULL
走的时候要关闭文件(关闭了数据才会保存到文件中)
int fcolse(FILE*fp);
参数是文件指针
例句:
参数:文件指针
//快慢:寄存器 缓存 内存 (缓存,公交车去市区)
操作文件和数据的时候是在内存中操作,不关闭的话是数据还在缓存中,还未来得及写入文件中,会导致数据丢失,就像申请空间不释放会导致内存泄露
//4声明argv (int argc,char **argv)这两个参数什么意思
//argc:表示接受参数个数
//argv:表示接受参数内容
//7定义文件指针
//8 argv[1]是你执行的时候要./a.out +文件名
有文件才会打开成功,自己创建1.txt
//9也可以指定文件名,第一个参数就是路径
./a.out的时候就不用加文件名了
//16关闭文件 fp是文件指针
//11perror()是显示打印错误的具体原因函数
perror(“fopen”)
例句:
这是没有2.txt这个文件
参数是可以是fopen
那么fwrite呢?
fread呢?
参数mode字符串代表着流形态。
mode有下列几种形态字符串:
(字符串 :单引号'r'字符,加上双引号“r”就是字符串,双引号引起来“任何字符”的都是字符串,中文字符也是)
对文件操作(读和写)
fread fwirte
fread(void *ptr, size_t size,size_t nmemb, FILE *stream);
fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
例句:
第一个参数:读取数据空间地址
?从文件指针*stream第四个参数获取的数据存储到本地所给的参数*ptr
就是第四个参数读取的数据保存到第一个参数里面
第二个参数就是数据的类型第三个就是数据的个数。所以我们要定义一个*ptr 数据空间(地址)来存放数据和读取 (保存文件的内容)
如果txt文件里面有字母和数字abc123怎么读取,统一看成字符‘a’‘b’'1' '2'
第二个参数:数据类型 或者块的大小
第三个参数:数据个数 或者块的个数
第四个参数:文件指针:操作的文件(fp)
返回值:
成功:表示读取数据的个数
失败:0 或者小于numb的个数,第三个参数,用buf的时候没有读满就不算一个数据就小于
char buf[1024] 每次读1k 0-1023
1024 放满才算一个数据
第二个参数 第三个参数
1024 1
512 2
256 4
1 1024
buffer缓存
r 文件不存在:不会创建,打开失败
文件存在:
读:从文件开头读
写:不可以写
r+ 文件不存在:不会创建,打开失败
文件存在:
读:从头读
写:从头写
w 文件存在:会创建
文件不存在
读:不可以读
写:清空的写
w+文件不存在:会创建
文件存在
读:可以读
写:清空的写
a 文件不存在:会创建
文件存在
读:不可以读
写:追加的写
a+ 文件不存在:会创建
文件存在
读:文件开头读
写:追加的写
验证代码,除了w+的读之外都适用
w+的读:w+的写已经是清空文件了,那怎么读呢,如果不能读的话跟w有什么区别,那这个w+就没有存在的意义了,用上面的函数验证出来w+是不能读的,怎么去验证w+的读呢
既然w+写已经清空内容了,那么我们把数据先从代码放入文件中,(从txt写进去的话读写的话还是被删啊)然后代码直接读就行了。
创建一个新的7.txt文件(w+会自己创建)
当前读写位置是2?
为什么我代码里面只传一个A它给我搞了两个?待解决
反正是验证完毕了,w+是可以读的
读和写:
按字符操作
fgetc();
fputc();
按行操作
fgets();
fputs();
按缓冲操作
fread();
fwrite();
按格式操作
fscanf();
fprintf();
int fgetc(FILE *stream);
char *fgets(char *s, int size, FILE *stream);
int fputc(int c, FILE *stream);
int fputs(const char *s, FILE *stream);
偏移:fseek()
int fseek(FILE *stream, long offset, int whence);
例句:
第一个参数:文件指针
第二个参数:偏移量(-1,0,1可以是负数,就是左移,是相当第三个参数偏移位置而言的)
第三个参数:偏移位置
SEEK_SET:表示文件开头
SEEK_CUR:表示当前位置
SEEK_END:表示文件结尾
返回值:成功:0
失败:-1
验证
fread和fwrite不是有那个块吗,用这个buf[1024]写的代码研究一下
char buf[1024]