fopen
FILE * fopen ( const char * filename, const char * mode );
作用:打开其名称在参数 filename 中指定的文件,并将其与流相关联,该流可在将来的操作中通 过返回的 FILE 指针进行标识。
允许对流执行的操作以及如何执行这些操作由 mode 参数定义。
默认情况下,如果已知返回的流不引用交互式设备,则该流将完全缓冲(请参阅 setbuf)。
可以通过调用 fclose 或 freopen 来取消返回的指针与文件的关联。所有打开的文件都会在 正常程序终止时自动关闭。
运行环境支持至少同时打开FOPEN_MAX个文件。
“r” | 读:打开文件进行输入操作。该文件必须存在。 |
“w” | 写:为输出操作创建一个空文件。如果已存在同名文件,则丢弃其内容,并将该文件视为新的空文件。 |
“a” | 附加:打开文件以在文件末尾输出。输出操作始终在文件末尾写入数据,并将其展开。重新定位操作(fseek、fsetpos、rewind)将被忽略。如果文件不存在,则创建该文件。 |
“r+” | 阅读/更新:打开要更新的文件(用于输入和输出)。该文件必须存在。 |
“w+” | 写入/更新:创建一个空文件并打开它进行更新(用于输入和输出)。如果已存在同名文件,则丢弃其内容,并将该文件视为新的空文件。 |
“a+” | 追加/更新:打开一个文件进行更新(用于输入和输出),所有输出操作都将数据写入文件末尾。重新定位操作(fseek、fsetpos、rewind)会影响下一个输入操作,但输出操作会将位置移回文件末尾。如果文件不存在,则创建该文件。 |
fputc
int fputc ( int character, FILE * stream );
作用:将字符写入流并推进位置指示器。
character:要写入的字符的 int 提升。
写入时,该值在内部转换为无符号字符。
stream:指向标识输出流的 FILE 对象的指针。
成功后,将返回写入的字符。
如果发生写入错误,则返回 EOF 并设置错误指示符 (ferror)
#include<stdio.h>
int main()
{
FILE* pf=fopen("data.txt","w");
if(pf==NULL)
{
perror("fopen");
return 1;
}
//写文件
char ch=0;
for(ch='a';ch<='z';ch++)
{
if(ch%5==0)
fputc('\n',pf);
fputc(ch,pf);
}
fclose(pf);
pf=NULL;
return 0;
}
fgets
char * fgets ( char * str, int num, FILE * stream );
从流中读取字符并将其作为 C 字符串存储到 str 中,直到读取 (num-1) 个字符或到达换 行符或文件末尾,以先发生者为准。
换行符使 fgets 停止读取,但函数将其视为有效字符,并包含在复制到 str 的字符串中。
在将字符复制到 str 之后,会自动附加终止 null 字符。
请注意,fgets 与 get 完全不同:fgets 不仅接受流参数,还允许指定 str 的最大大小,并在字符串中包含任何结束换行符。
#include <stdio.h>
int main()
{
FILE * pFile;
char mystring [100];
pFile = fopen ("myfile.txt" , "r");
if (pFile == NULL) perror ("Error opening file");
else {
if ( fgets (mystring , 100 , pFile) != NULL )
puts (mystring);
fclose (pFile);
}
return 0;
}
fprintf
int fprintf ( FILE * stream, const char * format, ... );
将按格式指向的 C 字符串写入流。如果 format 包含格式说明符(以 % 开头的子序列), 则格式化 format 后面的其他参数并将其插入到生成的字符串中,以替换其各自的说明符。
在 format 参数之后,该函数需要至少与 format 指定的其他参数一样多的参数。
规范 | 输出 | 例 |
---|---|---|
d 或 i | 有符号十进制整数 | 392 |
u | 无符号十进制整数 | 7235 |
o | 无符号八进制 | 610 |
x | 无符号十六进制整数 | 7fa |
X | 无符号十六进制整数(大写) | 7Fa |
f | 十进制浮点数,小写 | 392.65 |
F | 十进制浮点数,大写 | 392.65 |
e | 科学记数法(尾数/指数),小写 | 3.9265e+2 |
E | 科学记数法(尾数/指数),大写 | 3.9265E+2 |
g | 使用最短表示形式:%e 或 %f | 392.65 |
G | 使用最短表示形式:%E 或 %F | 392.65 |
a | 十六进制浮点数,小写 | -0xc.90FEP-2 |
A | 十六进制浮点数,大写 | -0XC.90FEP-2 |
c | 字符 | a |
s | 字符串 | sample |
p | 指针地址 | b8000000 |
n | 没有打印任何内容。 相应的参数必须是指向有符号 int 的指针。 到目前为止写入的字符数存储在指向的位置。 | |
% | 一个 % 后跟另一个 % 字符会将一个 % 写入流。 | % |
#include <stdio.h>
int main ()
{
FILE * pFile;
int n;
char name [100];
pFile = fopen ("myfile.txt","w");
for (n=0 ; n<3 ; n++)
{
puts ("please, enter a name: ");
gets (name);
fprintf (pFile, "Name %d [%-10.10s]\n",n+1,name);
}
fclose (pFile);
return 0;
}
fwrite
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
将 count 元素数组(每个元素的大小为 size bytes)从 ptr 指向的内存块写入流中的当前位 置。
流的位置指示器按写入的总字节数前进。
在内部,该函数将 指向的块解释为类型为 的元素数组,并按顺序写入它们,就好像为每个 字节调用一样。
ptr:指向要写入的元素数组的指针,转换为 const void*。
size:要写入的每个元素的大小(以字节为单位)。
size_t 是无符号整型。
count:元素的数量,每个元素的大小为 bytes。
size_t 是无符号整数类型。
stream:指向指定输出流的 FILE 对象的指针。
返回成功写入的元素总数。
如果此数字与 count 参数不同,则写入错误会阻止函数完成。在这种情况下,将为流设置错误指示器 (ferror)。
如果 size 或 count 为零,则函数返回零,错误指示器保持不变。
#include <stdio.h>
int main ()
{
FILE * pFile;
char buffer[] = { 'x' , 'y' , 'z' };
pFile = fopen ("myfile.bin", "wb");
fwrite (buffer , sizeof(char), sizeof(buffer), pFile);
fclose (pFile);
return 0;
}