文件
文件复位
将文件指针复位的2种方法
第一种
rewind(fp);
第二种
fseek(fp,0L,SEEK_SET)
起始点 表示符号 数字表示
文件首 SEEK—SET 0
当前位置 SEEK—CUR 1
文件末尾 SEEK—END 2
例如:fseek(fp,100L,0);其意义是把位置
指针移到离文件首100个字节处。fseek函
数一般用于二进制文件。
#include<stdio.h>
int main() {
char ch;
FILE* fp;
fp = fopen("test.cpp", "rt");
puts("\n第1次输出文件:\n");
while ((ch=fgetc(fp))!=EOF) putchar(ch);
//将文件指针复位的2种方法
rewind(fp);
//或者
//fseek(fp,0L,SEEK_SET);
puts("\n第2次输出文件:\n");
while ((ch = fgetc(fp)) != EOF) putchar(ch);
fclose(fp);
return 0;
}
文件拷贝
#include<stdio.h>
int main() {
FILE* fp1 = fopen("test.cpp", "rt");
FILE* fp2 = fopen("test.txt", "wt");
while (!feof(fp1)) {
fputc(fgetc(fp1), fp2);
}
fclose(fp1);
fclose(fp2);
return 0;
}
//正确的程序如下:fflush函数的使用
#include <stdio.h>
#include <ctype.h>
int main() {
char ch;
FILE *fp=fopen("test.txt","r+");
while ((ch=fgetc(fp))!=EOF) {
fseek(fp,-1,1);
fputc(islower(ch)?toupper(ch):tolower(ch),fp);
fflush(fp); //没有这个语句结果是错误的!
}
fclose(fp);
return 0;
}
注意文件读写函数用法
fgetc
fputc
fgets
fputs
数据块读写fwrite fread
格式化读写fscanf fprintf
fgets
char *fgets(char *str, int n, FILE *stream)
参数
str -- 这是指向一个字符数组的指针,该数组存储了要读取的字符串。
n -- 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。
stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。
fputs
int fputs(const char *str, FILE *stream)
参数
str -- 这是一个数组,包含了要写入的以空字符终止的字符序列。
stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符串的流。