处理文件

在头文件<stdio.h>中提供处理问件的库函数。

文件的两种类型:文本文件和二进制文件

文本文件:将数据写入文本文件时,数据写入为字符,这些字符组成为数据行,在每一行的末尾用换行结束。如果写入的是二进制数据,例如int或者double类型,则先将其转化成字符类型,在写入文件

二进制文件:将数据写入二进制文件时,总是写入一系列字节,与他在内存中的表现形式相同,例如double类型就是写入8个字节。

总结:字符数据本身在内存中就经过了编码,所以无论是二进制还是文本形式都是一样的,而对于非字符数据来说,例如inti=10;如果用二进制来进行存储的话为1010,但是如果需要用文本形式来进行存储的话就必须进行格式化编码(对1和0分别编码,即形式为‘1’和‘0’分别对应的码值)。

打开文件

FILE *fopne( char *name, char *mode)

其中mode可以为:“w”,“a”,“r”

当mode为“w”或者“a“时,如果name为一个包含目录的路径,而且其中有一部分目录不存在,则返回NULL,否则如果只是一个文件名而且在当前目录下没有这个文件,则创建这个文件不返回NULL。

当mode为”r“时,如果文件不存在,则返回NULL。

文件重命名

int rename(const char *oldname, const char *newname)

如果文件删除成功,则返回0;如果文件删除失败,则返回非零值。

删除文件

remove(char *naem)

删除时,文件不应该是打开的。

清除缓冲区(将缓冲区中的数据写入文件中)

fflush(pfile)

如果写入成功的,则返回0;如果写入失败,返回EOF。

在文件中移动
获得文件中的当前位置
int ftell(FILE *pfile)
返回long类型的变量,表示距离文件开头的偏移字节数
int fgetpos(FILE *pfile, fpos_t *position)
成功,则在position中存储当前位置和文件的状态信息,并返回0,否则返回非零整数。
在文件中设定位置
int fseek(FILE *pfile, long offset, int origin)
对于文本文件,origin必须是SEEK_SET,成功,返回0;失败,返回非零值。
int fsetpos(FILE *pfile, fpos_t *position )
成功,返回0;失败,返回非零值。

创建临时文件
FILE pfile;
pfile = tmpfile();
判断是否到达文件尾
feof()
如果文件结束,则返回非0值,否则返回0.


文本文件操作

向文本文件中写入一个字符

int fputc(int c, FILE *pflie)

写入成功,返回写入的字符;写入失败,返回EOF。

注意:fputc ()函数与putc()函数等价,唯一的区别就是putc()函数是一个宏,而fputc()实现为一个函数。

从文本文件中读取一个字符

int fgetc( FILE* pfile)

读取成功,将返回读取的字符;读取失败,则返回EOF。

注意:fgetc ()函数与getc()函数等价,唯一的区别就是getc()函数是一个宏,而fgetc()实现为一个函数。


向文本文件中写入字符串

int fputs( char *pstr, FILE *pfile)

将字符串写入文件直到碰到‘\0’,但是‘\0’不会写入文件。通常是写入一行字符串最后加一个换行符。

写入成功,返回0或者整数,否则返回EOF。

从文本文件中读取字符串

char *fgets( char *pstr, int nchars, FILE *pfile)

从文本文件中读取字符串,直到碰到‘\n’或者已经读入nchars-1个字符为止。

读取成功,返回pstr指针;否则返回NULL。

格式化文件输入输出

输入到文件:fprintf(FILE* pflie, ”格式字符串“, 变量);

从文件输出:fscanf(FILE* pflie, ”格式字符串“, 变量);

注意:数据存放在文件中,只是存放字节,这些字节的意义取决与你怎么解释它们

代码框架如下:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
  FILE *file1 = NULL;
  FILE *file2 = NULL;
  char str[] = "sdgfsdfgdsgfsdgd!";
  int len = strlen(str);
  int ch = 0;
  int const CHAR_MAX = 80;
  char *proverbs[] ={
    "sdgfsdgdfsgfdsgds\n",
    "dfgfsdgdfshhhhhhhfdgj",
    "sgdfsfdshsdfh"
    "dsgdfshdshds\n"
  };

  if(!(file1 = fopen("test1.txt", "w")))
  {
    printf("打开文件失败");
    exit(1);//使用此函数必须引入stdlib.h头文件
  }
  /*
    向文本文件中写入一个字符
  */
  size_t i ;
  for ( i = 0; i < len; i++)
  {
    if( fputc(str[i], file1) != EOF )
    {
      printf("写入%c成功\n", str[i] );
    }
  }


  /*
    向文本文件中写入字符串
  */
  int count = sizeof(proverbs)/sizeof(proverbs[1]);
  size_t j ;
  for(j = 0; j < count; j++)
  {
    if ( fputs(proverbs[j], file1) != EOF) {
      printf("成功将字符串%s写入文件\n", proverbs[j]);
    }else{
      printf("写入字符串%s失败\n", proverbs[j]);
    }
  }
  fflush(file1);
  fclose(file1);

  if (!(file2 = fopen("test1.txt", "r"))) {
    printf("打开文件失败" );
    exit(1);
  }
  /*
    从文本文件中读取一个字符

  while ( (ch = fgetc(file2)) != EOF) {
    printf("从文件中读取%c成功!\n",ch );
  }
  */
  /*
    从文本文件中读取字符串
  */
  char temp[CHAR_MAX];//char temp = NULL;不可以
  while( fgets(temp, CHAR_MAX, file2))
  {
    printf("从文本文件中读取字符串:%s\n",temp );

  }
  fclose(file2);
  return 0;
}


注意:在将数据写入文件之后并不可以马上读取,同样,在读取文件数据之后也不可以马上写文件。因为将数据写入到文件之后,并不是将数据写到外部设备上,而是将其放入缓冲区中,直到缓冲区满了或者发生其他情况,才将数据写入文件中。同理,当读取文件数据的时候,会将数据读取到缓冲区中,直到缓冲区的数据空了,才会继续从文件中读取数据。因此,在读模式和写模式之间进行转换的时候,需要使用fflush()函数刷新缓冲区。


二进制文件操作


写入二进制文件
size_t fwrite( const void* buffer, size_t size, size_t count, FILE* pfile)
写入成功,则返回与count一样的数,否则,返回其真实写入的数据的个数。
读区二进制文件
size_t fread ( void *buffer, size_t size, size_t count, FILE *pfile)
读取成功,则返回与count一样的数,否则,返回其真实读取的数据的个数。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WinForm是基于Windows操作系统的GUI开发框架,它提供了很多方便的控件和功能,可以用来开发各种Windows应用程序。当需要批量处理文件时,可以借助WinForm的功能来实现。 首先,要实现文件的批量处理,我们需要提供一个用户界面,让用户可以选择需要处理文件。可以使用WinForm中的OpenFileDialog控件来实现文件选择的功能。 然后,我们可以使用C#语言中提供的文件操作方法来处理文件。可以使用System.IO命名空间下的File类和Directory类来进行文件的读取、写入、复制、删除等操作。可以结合循环和条件判断语句来遍历文件夹中的文件,并根据需求进行相应的处理。 在WinForm中,可以使用Button控件或者菜单栏来触发文件处理的操作。可以给按钮添加事件处理程序,在事件处理程序中调用文件处理的方法。 另外,为了提高用户体验,可以使用进度条等控件来显示文件处理的进度。可以通过在文件处理的过程中更新进度条的值来展示处理的进度。 最后,处理文件后,可以使用MessageBox或者另外一个窗口来提示用户处理结果,例如成功处理文件数量,或者是否出现错误等信息。 综上所述,借助WinForm的功能,我们可以实现文件的批量处理。通过提供用户界面、文件选择、文件操作、进度条以及结果提示等功能,可以方便地进行文件处理。同时,需要注意异常处理,避免出现错误导致程序崩溃。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值