首页 > 其他分享 >文件操作

文件操作

时间:2023-12-15 09:22:25浏览次数:26  
标签:fp 文件 字符 int 读写 FILE 操作

文件操作

目录

二进制文件和文本文件

  • 二进制文件是一种字节序列,没有字符变换,其中的数据以二进制存储
  • 文本文件是一种字符序列,其中的数据以ASCII码存储

存储数据123时占用空间:

二进制文件:    00000000 01111011
                            123(bin)
文本文件:      00110001 00110010 00110011
                    "1"      "2"      "3"

文件的打开与关闭

打开文件

fopen()函数,返回值为文件指针,若返回为NULL则表示文件不存在。
函数原型:

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

stdio.h中定义了结构体 FILE。

// 例子:只读打开"D:\\text.txt"(首先确保此文件存在)

FILE *fp = fopen("D:\\text.txt", "r");

关闭文件

fclose()函数,当关闭成功时返回0,否则返回非0值。
函数原型:

int fclose(FILE *fp);

文件读写

按字符读写文件

读出字符fgetc()

函数fgetc()用于从一个以只读或读写方式打开的文件上读字符。
函数原型:

int fgetc(FILE *fp);
// fp是函数 fopen() 返回的文件指针

若读取成功,则返回该字符;若读到文件末尾,则返回EOF(一个符号变量,在stdio.h中定义为-1)

写入字符fputc()

函数fputc()用于将一个字符写入一个文件
函数原型:

int fputc(int c, FILE *fp);
// fp是函数 fopen() 返回的文件指针,c 是要输入的字符

若成功写入,返回字符c;若写入错误,则返回EOF

按字符串读写

按字符串读fgets()

char *fgets(char *s,int n,FILE *fp);
// 从fp所指的文件中读取字符串并在字符串末尾添加'\0',然后存入s,最多读n-1个字符
// 当读到回车换行符、文件末尾或读满n-1个字符时函数返回该字符串的首地址

若出现写入错误,则返回 EOF,否则返回一个非负数

按字符串写fputs()

int fputs(const char *s, FILE *fp);

按格式读写

按格式读fscanf()

int fscanf(FILE *fp, const char *format, ...);
// 比 scanf() 多了文件指针

从fp中读:

fscanf(fp, "%d%f", &i, &t);

按格式写fprintf()

int fprintf(FILE *fp,const char *format,...);
// 比 printf() 多了文件指针

写入fp:

fprintf(fp, "%d,%6.2f", i, t);

按数据块读写

数据块读fread()

从fp所指的文件中读取数据块并存储到buffer指向的内存中

unsigned int fread(void *buffer, unsigned int size, unsigned int count, FILE *fp);
// buffer是数据块起始地址

返回实际读到的数据块个数

数据块写fwrite()

将buffer指向的内存中的数据块写入fp所指的文件

unsigned int fwrite(const void *buffer, unsigned int size, unsigner int count, FILE *fp);

使用举例:
若文件以二进制形式打开:
fread(f,4,2,fp);
此函数从fp所指向的文件中读入2个4个字节的数据,存储到指针f所指向的空间中。

文件随机访问

fseek()

将fp的文件位置指针从fromwhere开始移动offset个字节,指示下一个要读取数据的位置

int fseek(FILE *fp, long offset, int fromwhere);
// ANSI C 要求偏移量offset为长整型数据,常量数据后要加L
// fromwhere有三个取值:0(SEEK_SET)表示文件开始,1(SEEK_CUR)表示当前位置,2(SEEK_END)表示文件末尾

rewind()

void rewind(FILE *fp);

将文件位置指针指向文件首字节,即重置到文件首部

ftell()

long ftell(FILE *fp);

按相对文件首部的偏移量来表示当前文件指针位置

标签:fp,文件,字符,int,读写,FILE,操作
From: https://www.cnblogs.com/gisliw/p/17902649.html

相关文章

  • spring xml配置文件之context:annotation-config
    我们一般在含有Spring的项目中,可能会看到配置项中包含这个配置节点context:annotation-config。<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-......
  • backblaze b2通过cli下载大文件快照snapshots
    按照官方的常规方式,是先在cli下查看buckets  list-buckets找到b2snapshots的名称,然后通过download-file下载b2download-file--thread1b2://snapshots目录/备份文件名.注意下载大文件,最好是把现成设置成1-----------------------以上是常规方法,但是我下载了几......
  • MacOS-“System Information”这个App用做USB设备的检测与设备文件的确定
    “SystemInformation”这个Apple自带的GUI小App是检测USB硬件的;如图所示;而Linux上是lsusb与lspci这类commandline的command;找到USB硬件的设备信息,需要与设备文件映射,怎么找?`bash-3.2#ls/dev/tty*|sort>sys.txt#连接USB硬件前bash-3.2#ls/dev/tt......
  • 基于FPGA的图像形态学腐蚀算法实现,包括tb测试文件和MATLAB辅助验证
    1.算法运行效果图预览 将FPGA的仿真结果导入到MATLAB,结果如下所示:   2.算法运行软件版本vivado2019.2 matlab2022a 3.算法理论概述      基于FPGA的图像形态学腐蚀算法实现主要依赖于图像处理的基本原理和数学形态学的基础知识。在图像处理中,形态学操......
  • Flutter开发之安卓打包,和获取签名相关信息,公钥值相关操作
    我们Flutter开发中,难免有些小朋友因需求要获取打包签名的一些相关信息,下面我们来讲一下怎么获取一生成签名文件我们打包安卓APK包需要先生成签名文件,需运行以下指令,生成签名文件keytool-genkey-v-keystoreGMT\_keystore.keystore-aliasGMT\_keystore-keyalgRSA-keysi......
  • 函数实现一维数组基本操作
    论如何用一个代码实现一堆数字的排序,删除,插入,查找。这当然少不了我们在数组上的操作,将这些看成一个个小功能,接下来我们为了使结构直观,这里我用函数来实现这些功能首先是声明//功能voidFunction();//排序voidSort(inti,intnum);//查找voidFind(intz);//插入voidIn......
  • 【TFTP】客户端上传文件
    1////客户端上传文件2#include<stdio.h>3#include<string.h>4#include<unistd.h>5#include<arpa/inet.h>6#include<netinet/in.h>7#include<sys/types.h>8#include<sys/stat.h>9#include<fcntl.h&g......
  • tmux配置文件.tmux.conf (tmux 3.0a)
    本文是基于tmux3.0a进行的配置,使用tmux-V可查看版本下面是配置文件内容,在家目录下创建.tmux.conf,并粘贴下面内容保存后,进入tmux,ctrl+b,然后输入命令:source-file~/.tmux.conf即可(或在bash下执行tmuxsource~/.tmux.conf)。因为下面的命令中,bind了r作为source-file~/.tmu......
  • 用JAVA实现大文件上传及显示进度信息
    一. 大文件上传基础描述:各种WEB框架中,对于浏览器上传文件的请求,都有自己的处理对象负责对Http MultiPart协议内容进行解析,并供开发人员调用请求的表单内容。比如:Spring 框架中使用类似CommonsMultipartFile对象处理表二进制文件信息。而.NET 中使用HtmlInputFile/ Ht......
  • PHP复用CURL简单文件上传的2种方法
    方法一:curlFile客户端$filePath='head.txt';//创建CURLFile对象$file=newCURLFile($filePath);//创建cURL资源$ch=curl_init();//设置cURL选项curl_setopt($ch,CURLOPT_URL,$your_upload_url);//替换为实际的上传接口URL......