C语言标准I/O_fread/fwrite

好久不用,对C语言文件操作都有点生疏了,由于工作需要,稍稍的复习一下;

下面的程序用C语言的fread/fwrite来读取hex文件,并且拷贝,目的是拷贝后的文件需要和源文件不能有任何差异;

// Hex.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#define SIZE 512

int main(int argc, char* argv[])
{
	int i = 0;
	int cnt = 0;
	int nRet = 0;
	char buf[SIZE];
	FILE *fpr = NULL;
	FILE *fpw = NULL;

	if( (fpr=fopen("D:\\LED.hex", "r")) == NULL )
		fprintf(stderr, "Open LED.hex error");
	if( (fpw=fopen("D:\\test.hex", "w")) == NULL )
		fprintf(stderr, "Open test.hex error");

	while( (nRet=fread(buf, 1, sizeof(buf), fpr)) != 0 )
	{
		for(i=0; i<nRet; i++)
		{
			printf("%x ", buf[i]);
		}
		fwrite(buf, 1, nRet, fpw);
		++cnt;
	}
	printf("\nRead Times: %d, Down!\n", cnt);

	return 0;
}

fread(addr, size, num, fp); //size代表每次读取的字节数,num代表需要读取几块size这样的数据;

成功返回读取到的字节数,失败返回-1,读取到达文件末尾返回0;

实验发现,只要每次读一个字节,不管你buf的缓冲类型是什么,都是可以读取成功的,基本不会出现什么问题,这个东西熟悉C语言的应该都已经知道了,献丑了,下面的程序用来对比,nRet用来接收fread读到的字节数:

// Hex.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <string.h>

#define SIZE 256

int main(int argc, char* argv[])
{
	int i = 0;
	int cnt = 0;
	int nRet = 0;
	int flag = 1;
	short buf[SIZE];
	FILE *fpr = NULL;
	FILE *fpw = NULL;

	if( (fpr=fopen("D:\\LED.hex", "r")) == NULL )
		fprintf(stderr, "Open LED.hex error");
	if( (fpw=fopen("D:\\test.hex", "w")) == NULL )
		fprintf(stderr, "Open test.hex error");

	while( (nRet=fread(buf, 1, sizeof(buf), fpr)) != 0 )
	{
		if(flag == 1)
		{
			for(i=0; i<nRet; i++)
			{
				printf("%x ", buf[i]);
			}
		}
		fwrite(buf, 1, nRet, fpw);
		++cnt;
		++flag;
		memset(buf, 0, sizeof(buf));
	}
	printf("\nRead Times: %d, Down!\n", cnt);

	return 0;
}

注意,两种方式打印的格式不一样,因为第一个是char类型,第二个是short类型,但这里主要是验证文件是完好的,就不考虑这些了;

时间: 2024-08-26 14:28:50

C语言标准I/O_fread/fwrite的相关文章

C语言标准库函数qsort详解

1 函数简介 功 能: 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *)); 参数: 1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序 2 基本用法 使用qsort()排序并用 bsearch()搜索是一个比较常用的组合,使用方便快捷. qsort 的函数原型是

文件流:&quot;fopen&quot;,&quot;fclose&quot;,“ftell”&quot;fseek&quot;,&quot;fgets&quot;,&quot;fprintf&quot; ,“feof”,&quot;fwrite&quot;,&quot;fread&quot;

char const* filename="D:/hello.txt"; "fopen", FILE *fp=fopen(char const *name,char const mode); e.g:FILE *fp = fopen(filename,"wb"); 打开文件流,name为要打开文件的路径,如这里的filename:mode 为对文件的操作模式,通常使用:"wb"(写操作),"rb"(读操作)

fread(),fwrite() 读/写流

C 库函数 - fread() 描述 C 库函数 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) 从给定流 stream 读取数据到 ptr 所指向的数组中. 声明 下面是 fread() 函数的声明. size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) 参数 ptr -- 这是指向带有最小尺寸 size*nmemb 字节的内存块的指针.

fscanf函数和fprintf函数、fgets函数和fputs函数、fread函数和fwrite函数

1. fscanf 函数和 fprintf 函数 1.1 fscanf 函数 fscanf 函数只能从文本文件中按格式输入.fscanf 函数和 scanf 函数相似,只是输入的对象是磁盘上文本文件的数据.函数的调用形式如下: fscanf( 文件指针,格式控制字符串,输入项表 ); 例如,若文件指针 fp 指向一个已打开的文本文件,a.b 分别为整型变量,则以下语句从 fp 所指的文件中读入两个整数放入变量 a 和 b 中: fscanf( fp, "%d%d", &a, &

关于二进制文件fread、fwrite函数使用读写

环境:vs2013 语言:C语言 时间:2015年3月10日 功能:实现二进制文件的读写实例 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #define FILENAME "d:/studentInfo" #define COUNT 5 typedef struct { char name[10]; short Math; short Chinese; short

8.5 文件IO fgets fputs fgetc fwrite fread

fopen函数mode模式: w+不是追加写 是多了一个读权限 文件指针+1没有意义 拷贝一个文件: fgets     fputs   (fgetc同理) int main() { FILE *fp, *fpcp; fp = fopen("yesteday_once_more.txt", "r"); fpcp = fopen("a", "w"); char buf[1024]; //一行给他1024个字节 尽量够用 whil

用fread和fwrite实现文件复制操作

#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc,char **argv) { FILE *fp_src,*fp_des; char buf[128]; int num; if(argc!=3) { printf("the format must be: cp_example file_src file_des\n"); exit(EXIT_FAI

fread和fwrite同时对一个文件读写

这几天看到了fopen的参数设置.中文的那些真的是不能帮助精确理解.在网上发现了英文的,特附上: FILE *fopen(const char *filename, const char *mode)fopen opens the named file, and returns a stream, or NULL if the attempt fails. Legal values for mode include:"r"open text file for reading"

C语言:用二进制方式向文件读写一组数据(fread、fwrite)

#include<stdio.h> #define SIZE 10 struct student { char name[10]; int num; int age; char addr[15]; }stu[SIZE]; //保存数据(fwrite) void save() { FILE *fp; fp = fopen("stu.dat","wb"); if(fp==NULL) { printf("file can not open!\n&qu