總覽
FILE* fp = fopen("filename", "r/w/a");
fclose(fp);
ch = getc(fp);
putc(ch, stdout);
fgets(str, 8, fp1);
fputs(str, fp);
fscanf(fp1, "%s", chs);
fprintf(fp, "%s", str);
fwrite(a, sizeof(int), 4, fp);
fread(num, sizeof(int), 5, fp1);
詳細介紹
fopen and fclose
打開和關閉文件,打開的形式有讀r、寫w、追加r,“+”的意思是不存在該文件,則先創建此文件。注意,寫的形式會將原來的內存全部刪除。
FILE * fopen ( const char * filename, const char * mode );
int fclose ( FILE * stream );
實例
FILE* fp;
if ((fp = fopen(argv[1], "w")) == NULL) {
printf("Can't open %s file", argv[0]);
exit(1);
}
fclose(fp);
getc and putc
讀寫單個字符
char c = getc(FILE *stream); // eg, c = getc(stdin), 讀入一個字符
int c = putc(char c, FILE *stream); // 將c寫進文件流中,成功則返回c,出錯返回EOF
實例
// getc and putc
/*char ch;
FILE* fp;
if ((fp = fopen(argv[1], "r+")) == NULL) {
printf("Can't open %s\n", argv[1]);
exit(1);
}
while ((ch = getc(fp)) != EOF) { // getc
putc(ch, stdout); // putc
}
fclose(fp);
*/
fgets and fputs
讀寫一段字符串
char * fgets ( char * str, int num, FILE * stream ); // num爲字符串最大值,包含'\0'
int fputs ( const char * str, FILE * stream ); // 成功則返回非負數,出錯返回EOF
實例
// fgets and fputs
if ((fp = fopen(argv[1], "w+")) == NULL) {
printf("Can't open %s\n", argv[1]);
exit(1);
}
char str[20];
gets(str);
fputs(str, fp); // fputs
fclose(fp);
FILE *fp1= fopen(argv[1], "r");
fgets(str, 8, fp1); // fgets
puts(str);
printf("%d\n", strlen(str));
fclose(fp1);
fscanf and fprintf
讀寫一段字符串
int fscanf ( FILE * stream, const char * format, ... );
int fprintf ( FILE * stream, const char * format, ... );
實例
FILE* fp;
if ((fp = fopen(argv[1], "a")) == NULL) {
printf("Can't open %s file", argv[0]);
exit(1);
}
char str[20];
gets(str);
fprintf(fp, "%s", str); // fprintf接收空格符
fclose(fp);
FILE* fp1;
char chs[30];
fp1 = fopen(argv[1], "r");
fscanf(fp1, "%s", chs); // fscanf不接收空格符
puts(chs);
fclose(fp1);
fread and fwrite
讀寫所有的數據類型,不僅限於char
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); // size指讀的數據類型大小,count指讀多少個
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream ); // 同fread
實例
// fread and fwrite
FILE* fp;
if ((fp = fopen(argv[1], "w")) == NULL) {
printf("Can't open %s file", argv[0]);
exit(1);
}
int a[] = {1,2,3,4,5};
fwrite(a, sizeof(int), 4, fp); // fwrite
fclose(fp);
FILE* fp1 = fopen(argv[1], "r");
int num[10];
fread(num, sizeof(int), 5, fp1); // fread
for (int i = 0; i < 5; i++) {
printf("%d\n", num[i]); // num[4]未初始化
}
fclose(fp1);
完整代碼
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char const *argv[])
{
if (argc != 2) {
printf("Usage: %s filename\n", argv[0]);
exit(1);
}
// getc and putc
/*char ch;
FILE* fp;
if ((fp = fopen(argv[1], "r+")) == NULL) {
printf("Can't open %s\n", argv[1]);
exit(1);
}
while ((ch = getc(fp)) != EOF) { // getc
putc(ch, stdout); // putc
}
fclose(fp);
*/
// fgets and fputs
/*FILE* fp;
if ((fp = fopen(argv[1], "w+")) == NULL) {
printf("Can't open %s\n", argv[1]);
exit(1);
}
char str[20];
gets(str);
fputs(str, fp); // fputs
fclose(fp);
FILE *fp1= fopen(argv[1], "r");
fgets(str, 8, fp1); // fgets
puts(str);
printf("%d\n", strlen(str));
fclose(fp1);
*/
// fscanf and fprintf
/*FILE* fp;
if ((fp = fopen(argv[1], "a")) == NULL) {
printf("Can't open %s file", argv[0]);
exit(1);
}
char str[20];
gets(str);
fprintf(fp, "%s", str); // fprintf接收空格符
fclose(fp);
FILE* fp1;
char chs[30];
fp1 = fopen(argv[1], "r");
fscanf(fp1, "%s", chs); // fscanf不接收空格符
puts(chs);
fclose(fp1);
*/
// fread and fwrite
FILE* fp;
if ((fp = fopen(argv[1], "w")) == NULL) {
printf("Can't open %s file", argv[0]);
exit(1);
}
int a[] = {1,2,3,4,5};
fwrite(a, sizeof(int), 4, fp); // fwrite
fclose(fp);
FILE* fp1 = fopen(argv[1], "r");
int num[10];
fread(num, sizeof(int), 5, fp1); // fread
for (int i = 0; i < 5; i++) {
printf("%d\n", num[i]); // num[4]未初始化
}
fclose(fp1);
return 0;
}