c 文件操作函数

来源:互联网 发布:从零开始学mt4编程 编辑:程序博客网 时间:2024/04/25 21:37

缓冲flush函数
1.int fflush(FILE* stream)  // 清空缓冲流
  fflush (NULL)     //清空所有输出流和上面提到的更新流

2.int setvbuf( FILE *stream,
               char* buf,  //缓冲区的地址
               int mode,   //缓冲区的类型
               size_t size )  // 缓冲区内字节的数量
缓冲区的类型:              
_IOFBF(满缓冲):当缓冲区为空时,从流读入数据。或者当缓冲区满时,向流写入数 据。
_IOLBF(行缓冲):每次从流中读入一行数据或向流中写入一行数据。
_IONBF(无缓冲):直接从流中读入数据或直接向流中写入数据,而没有缓冲区。
 
if (setvbuf(input, bufr, _IOFBF, 512) != 0)
是设置 input这个文件流使用 bufr 所指的512个字节作为 input文件的buffer,
当你操作input文件时,数据都会暂存在 bufr 里面,每次读input时,
系统会一次性读512字节到bufr里暂存。             
3.void setbuf( FILE* stream,
               char* buf ) //参数buf必须指向一个长度为BUFSIZ(定义在stdio.h头文件中)的缓冲区
       为了关闭缓冲,可以将buf参数设置为NULL
       等价于( void )setvbuf( stream, buf, _IOFBF, BUFSIZ ).

setbuf(stdout,outbuf);//将输出流绑定到outbuf上

文件指针
1.rewind(fp);  //回到文件开始处
文件起始点的模式:
SEEK_SRT     文件开始       
SEEK_CUR     当前位置       
SEEK_END      文件结尾
 
2.int fseek(FILE *stream, long offset, int fromwhere);
fseek(fp, 0L, SEEK_SET);    // 找到文件的开始处
fseek(fp, 10L, SEEK_SET);   // 找到文件的第11个字节
fseek(fp, 2L, SEEK_CUR);    // 从文件的当前位置向前移动2个字节
fseek(fp, 0L, SEEK_END);    // 到达文件结尾处
fseek(fp, -10L, SEEK_END);  // 从文件结尾处退回10个字节

3.ftell(fp);    //返回当前文件的指针

ftell() 和 fseek() 用长整型表示文件内的偏移 (位置),因此它们限制文件的大小只能在 long类型
的表示范围之内。而新的 fgetpos() 和 fsetpos() 函数使用了一个特殊的类型定义
fpos_t 来表示偏移量。这个类型会适当选择, 因此, fgetpos() 和 fsetpos 可以表示任
意大小的文件偏移。

int fsetpos(FILE * stream, const fpos_t * pos); //将文件指针定位在pos指定的位置上
FILE  *fp;
fpos_t pos = 90;
 if( fsetpos( fp, &pos ) != 0 )
      perror( "fsetpos error" );
else
      {   ....
      }
fclose(fp);

int fgetpos(FILE * restrict stream, fpos_t * restrict pos);//取得当前文件的句柄
FILE  *fp;
fpos_t pos ;
fgetpos(stream, &filepos);
printf("The file pointer is at byte\
%ld\n", filepos);
fclose(fp);

字符读写:
1.int  fgetc( FILE* stream );              // 从文件读入一个字符
char ch;
while((ch=fgetc(stdin))!=EOF)
{//...
}

2.int  fputc( int ch, FILE* stream );   // 写入一个字符到文件   
字符串读写:
1.char*  fgets( char* _Buf,    //要从文件中读入字符串的存放空间
                int _MaxCount, //最大读取字节数
                FILE* _File )  //文件指针
char  string[215]              
fgets(string,strlen(string), stream);

3.int  fputs( const char* _Str, //要写入文件的字符串
              FILE* _File )     //文件指针
fputs(str,fp);

格式化数据读写:
1、int  fprintf( FILE* _File, const char* _Format, ... );
fprintf()  与printf() 相似 但需要第一个 FILE 指针参数来指定要操作的文件
           fprintf(stdout, "a.s\n"); 等同与 printf("a.s\n");

2、int  fscanf( FILE* _File, const char* _Format, ... );
fscanf()   与scanf() 相似 但需要第一个 FILE 指针参数来指定要操作的文件
           fcanf(stdin, "%s", a); 等同与 scanf("%s", a);

文件数据块读写:
1.打开文件
FILE * fp;
char fname[33] = "文件名";
if((fp = fopen(fname, "r")) != NULL)  // 如果成功打开文件
{
   printf("open fname failed!\n");
}
fclose(fp);               // 关闭fp指向的文件

fopen的打开方式有:
   r  打开只读文件,该文件必须存在。
   r+ 打开可读写的文件,该文件必须存在。
   w  打开只写文件,若文件存在先将文件长度截为0,即该文件内容会消失。若文件不存在则建立该文件。
   w+ 打开可读写文件,若文件存先将文件长度截为0,即该文件内容会消失。若文件不存在则建立该文件。
   a  以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
   a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
   rb,wb,ab,r+b,w+b,a+b,rb+,wb+,ab+
   与前面的模式相似,只是使用二进制模式而非文本模式 
        
2.写文件
char arr[256];
fwrite(arr, strlen(arr), 1, fp);
或者
double ent[10];
fwrite(ent, sizeof(double), 10, fp);

size_t fwrite
(
        const void *buffer,    // 要写入文件的数据块
        size_t size,           // 写入文件的字节数
        size_t count,          // 写入count个size大小的数据
        FILE *stream           // 文件指针
)

3.读文件
fread(ent, sizeof(double), 10, fp);
size_t  fread
(
        void * _DstBuf,            // 存放从文件读出来的数据
        size_t _ElementSize,       // 读取字节数
        size_t _Count,             // 读入次数
        FILE * _File               // 文件指针
)

0 0
原创粉丝点击