C语言文件的写入和读取操作

fopen
FILE * fopen ( const char * filename, const char * mode );

作用:打开其名称在参数 filename 中指定的文件,并将其与流相关联,该流可在将来的操作中通             过返回的 FILE 指针进行标识。
           允许对流执行的操作以及如何执行这些操作由 mode 参数定义。
           默认情况下,如果已知返回的流不引用交互式设备,则该流将完全缓冲(请参阅 setbuf)。
           可以通过调用 fclose 或 freopen 来取消返回的指针与文件的关联。所有打开的文件都会在               正常程序终止时自动关闭。
           运行环境支持至少同时打开FOPEN_MAX个文件。

“r”读:打开文件进行输入操作。该文件必须存在。
“w”写:为输出操作创建一个空文件。如果已存在同名文件,则丢弃其内容,并将该文件视为新的空文件。
“a”附加:打开文件以在文件末尾输出。输出操作始终在文件末尾写入数据,并将其展开。重新定位操作(fseekfsetposrewind)将被忽略。如果文件不存在,则创建该文件。
“r+”阅读/更新:打开要更新的文件(用于输入和输出)。该文件必须存在。
“w+”写入/更新:创建一个空文件并打开它进行更新(用于输入和输出)。如果已存在同名文件,则丢弃其内容,并将该文件视为新的空文件。
“a+”追加/更新:打开一个文件进行更新(用于输入和输出),所有输出操作都将数据写入文件末尾。重新定位操作(fseekfsetposrewind)会影响下一个输入操作,但输出操作会将位置移回文件末尾。如果文件不存在,则创建该文件。


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 指定的其他参数一样多的参数。

规范输出
 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 或 %f392.65
G使用最短表示形式:%E 或 %F392.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;
}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值