IO:实现文件拷贝的各种方法(观察每种函数中的参数和结束条件)

这篇具有很好参考价值的文章主要介绍了IO:实现文件拷贝的各种方法(观察每种函数中的参数和结束条件)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、使用fscanf实现,将一个文件中的数据打印到终端上(类似于cat一个文件)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <errno.h>
int main(int argc, const char *argv[])
{
	FILE *fp=fopen("1.txt","r");
	if(fp==NULL){
		perror("fopen");
		return -1;
	}
	char buf;
	//循环获取文件中的数据,直到文件读取完毕,退出循环
	//当fscanf返回值为-1时,退出循环
	while(fscanf(fp,"%c",&buf)!=-1){
		printf("%c",buf);
		buf=0;
	}
	//关闭
	fclose(fp);
	return 0;
}

注意:%d %s %f不会获取空格和换行,%c可以获取空格和换行字符;文章来源地址https://www.toymoban.com/news/detail-838645.html

二、使用fputc、fgetc实现文件拷贝(一次拷贝一个字符)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <errno.h>
int main(int argc, const char *argv[])
{
	//以读的方式打开源文件
	FILE *fpr=fopen(argv[1],"r");
	//以写的方式打开目标文件
	FILE *fpw=fopen("copy.txt","w");
	if(fpr==NULL|fpw==NULL){
		perror("open");
		return -1;
	}
	char c=0;
	while((c=fgetc(fpr))!=-1){
		fputc(c,fpw);
	}
	fclose(fpr);
	fclose(fpw);
	return 0;
}

三、使用fgets、fputs实现文件拷贝(一次拷贝一个buf大小的内容)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <errno.h>
#include <pthread.h>
int main(int argc, const char *argv[])
{
	FILE *fpr=fopen("1.txt","r");
	FILE *fpw=fopen("2.txt","w");
	if(fpr==NULL || fpw==NULL){
		perror("open");
		return -1;
	}
	char buf[32]="0";
	while(fgets(buf,sizeof(buf),fpr)!=NULL){
		fputs(buf,fpw);
		}
	fclose(fpr);
	fclose(fpw);
	return 0;
}

四、使用fread、fwrite实现拷贝文件

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <errno.h>
#include <pthread.h>
int main(int argc, const char *argv[])
{
	FILE *fpr=fopen("1.txt","r");
	FILE *fpw=fopen("3.txt","w");
	if(fpr==NULL || fpw==NULL){
		perror("open");
		return -1;
	}
	char buf[32]="0";
	while(1){	
		//以一个字节为单位读取数据,每次读取sizeof(buf)个
		int res=fread(buf,1,sizeof(buf),fpr);
		if(res==0)
			break;
		//写入数据,以一个字节单位,写入实际读取到的数据,res个
		fwrite(buf,1,res,fpw);
	}
	fclose(fpr);
	fclose(fpw);
	return 0;
}

五、使用read、write实现拷贝文件

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <errno.h>
#include <pthread.h>
int main(int argc, const char *argv[])
{
	int fdr=open("1.txt",O_RDONLY);
	int fdw=open("5.txt",O_WRONLY|O_CREAT|O_TRUNC,0666);
	if(fdr<0||fdw<0){
		perror("open");
			return -1;
	}
	char buf[32]="0";
	int res;
/*	while(1){
		res=read(fdr,buf,sizeof(buf));
		if(res==0)
			break;
		write(fdw,buf,res);
	}*/
	while((res=read(fdr,buf,sizeof(buf)))>0){
		write(fdw,buf,res);
	}
	close(fdr);
	close(fdw);
	return 0;
}

到了这里,关于IO:实现文件拷贝的各种方法(观察每种函数中的参数和结束条件)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript之深度克隆、多种实现方式、列举各种方式的优缺点、对象自有属性、拷贝、复制

    在 JavaScript 中,对象和数组是引用类型,当将一个对象或数组赋值给另一个变量时,它们实际上是共享同一块内存空间。这意味着对一个对象或数组的修改会影响到所有引用它的变量。 为了创建一个独立的副本,可以使用深克隆。 JSON.stringify() 方法将 JavaScript 对象转换为一个

    2024年02月02日
    浏览(43)
  • Python学习笔记_基础篇(六)_Set集合,函数,深入拷贝,浅入拷贝,文件处理

    a、set集合,是一个无序且不重复的元素集合 set b、数据类型模块举例 a、数字和字符串 对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。 b、其他基本数据类型 对于字典、元祖、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地

    2024年02月12日
    浏览(38)
  • JavaScript深拷贝(js深拷贝,JavaScript递归函数,实现深拷贝)

    简述:JavaScript的深拷贝和浅拷贝大家都比较熟悉,今天来分享下深拷贝,就是使用该函数时,会复制拷贝一份该数据,修改该数据属性,不会改变原有数据,就是把复制的对象所引用的对象全都复制了一遍,具体实现如下; 1、定义拷贝对象; 2、定义递归函数deepClone(),实现

    2024年02月15日
    浏览(60)
  • Java注解、文件IO以及匿名函数

    注解可以在类、方法、构造器、成员变量、参数等地方进行使用,其作用是让其他程序根据注解的信息来决定怎么执行程序。 自定义注解的形式如下: 特殊属性名:value 。 如果注解中只有一个 value 属性,那么使用注解时, value 名称可以不写。 创建一个 Mytest1 的注解,注解

    2024年02月10日
    浏览(41)
  • C语言--文件操作详解(2)(文本文件和二进制文件,文件读取结束的判定,用函数进行文件的拷贝,文件缓冲区)

    本篇文章主要介绍了文本文件和二进制文件,文件读取结束的判定,如何使用函数进行文件的拷贝,文件缓冲区的相关知识。 以及具有保存功能的八功能通讯录的源码。 据数据的组织形式,数据文件被称为文本文件或者二进制文件。 ①数据在内存中以二进制的形式存储,如

    2024年02月08日
    浏览(45)
  • linux 拷贝文件到远程服务器的方法

    拷贝文件常用的命令为 scp 和 rsync 。 使用 scp 拷贝文件的时候,如果不是 root 用户无法直接拷贝到没有权限写入的文件夹。一般常用的做法是先将文件拷贝到 home 文件夹下,然后再远程使用 sudo 命令进行复制。 使用 rsync 拷贝文件时,如果远程用户配置了 sudo 免密,则可以远

    2024年02月16日
    浏览(40)
  • 传统IO与零拷贝

    传统的 I/O 数据传输是指在计算机系统中,使用输入/输出(I/O)操作进行数据传输的一种方式。这种方式通常涉及将数据从内存传输到外部设备(如磁盘、网络等)或从外部设备传输到内存。传统的 I/O 数据传输通常采用阻塞式的方式,即在进行数据传输时会阻塞当前的线程

    2024年02月12日
    浏览(30)
  • 二叉树各种函数的实现

    如果你觉得迷茫,那就尽可能选择比较困难的路。 目录   前言: 🍀一.通过前序遍历创建二叉树 🍁二.二叉树的四种遍历  🍂1.二叉树的前序遍历 🌼2.二叉树的中序遍历  🍌3.二叉树的后序遍历  🍊4.二叉树的层序遍历 🍍三.二叉树的结点个数 🍎四.二叉树的叶子结点的个

    2024年02月15日
    浏览(60)
  • vue实现深拷贝的方法

      在 vue中,深拷贝是一个很有用的功能,在不改变原来对象状态的情况下,进行对象的复制。 但要实现深拷贝,需要两个对象具有相同的属性。如果两个对象不同,深拷贝也不能实现。 1.我们将变量A的属性赋给变量B,但要确保B的属性也被赋给了变量A 5.我们将属性E和属性

    2024年02月06日
    浏览(37)
  • JS实现深拷贝的4种方法

    本文主要给大家介绍了关于JS实现深拷贝的4种方式,深拷贝是指将一个对象完整地拷贝一份,不受原对象影响,文中通过示例代码介绍的非常详细,需要的朋友可以参考下 深拷贝:在堆内存中重新开辟一个存储空间,完全克隆一个一模一样的对象; 浅拷贝:不在堆内存中重新开辟

    2024年02月04日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包