将一个文件内容复制到另一个文件(C语言和C++代码)

目录

fileCopy.c

fileCopy.cpp


✨欢迎来到脑子不好的小菜鸟的文章✨

      🎈创作不易,麻烦点点赞哦🎈

          所属专栏:项目

          我的主页:脑子不好的小菜鸟

          文章特点:关键点和步骤讲解放在

          代码相应位置

fileCopy.c

//作用:将一个文件复制到另外一个文件
// 我的程序代码名:fileCopy.c
//使用方法:在文件中找以exe结尾的文件(需要代码已经写完并自己生成exe文件)(以我的为例:fileCopy.exe),并打开,然后输入:fileCopy sourcefile destfile(sourcefile:被复制的文件名 destfile:复制了sourcefile的内容的文件)

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
	/*argc 与 argv []
	在程序中, main 函数有两个参数,整型变量 argc 和字符指针数组 argv []。
	argc 的含义是程序的参数数量,包含本身。
	argv []的每个指针指向命令行的一个字符串,
	所以 argv [0]指向字符串" copyFile . exe "。
	argv [1]指向字符串 sourceFile ,
	argv [2]指向字符串 destFile 。*/

	FILE* in, *out;//注意对文件操作要用文件指针
	int ch;//注意是int,而不是char,因为getc的返回值是int类型,而不是char

	if (argc != 3)//确保参数个数的正确性
	{
		fprintf(stderr, "请按正确格式输入:fileCooy.exe 源文件名 目标文件名\n");//一共三个参数:fileCooy.exe 源文件名 目标文件名
		//srderr:标准错误流
		/*int fprintf( FILE *stream, const char *format, ... );
		  fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.
		  因此fprintf()可以使得信息输出到指定的文件*/

		exit(EXIT_FAILURE);
		//头文件:stdlib.h
		//exit:直接结束程序,而return:返回上一层主调函数
		//EXIT_FAILURE:实际就是#define EXIT_FAILURE 1:表示异常退出
		//EXIT_SUCCRSS:表示安全退出#define EXIT_SUCCESS 0
		//exit(1):非正常执行退出程序
		//exit(0):正常执行退出程序

	}

	if (in = fopen(argv[1], "rb") == NULL)//二进制写入
	{
		fprintf(stderr, "打不开文件:%s\n", argv[1]);
		exit(EXIT_FAILURE);
	}

	if (out = fopen(argv[2], "wb") == NULL)//二进制读取
	{
		fprintf(stderr, "打不开文件:%s\n", argv[2]);
		fclose(in);/*记住关闭文件*/
		exit(EXIT_FAILURE);
	}

	while (ch = getc(in) != EOF)
	{
		if (putc(ch, out) == EOF)
			break;
	}

	if (ferror(in))//检查是否是因为错误结束
	{
		fprintf(stderr, "读取文件错误:%s\n", argv[1]);
		fclose(in);
		exit(EXIT_FAILURE);
	}

	if (ferror(out))//检查是否是因为错误结束
	{
		fprintf(stderr, "写入文件错误:%s\n", argv[2]);
		fclose(in);
		exit(EXIT_FAILURE);
	}

	printf("复制文件成功\n");
	fclose(in);

	return 0;
}

fileCopy.cpp

#include <iostream>
#include <fstream>//文件读写的流类(注意是类)
#include <stdio.h>

using namespace std;

int main(int argc, char* argv[])
{
	fstream fp("test.txt"/*文件名*/, ios::in | ios::out);//|:表示两种打开方式都可,这里是读取和写入的打开方式
	/*ios::in:以输入模式打开文件,只能进行读操作。
	ios::out:以输出模式打开文件,只能进行写操作。如果文件不存在,则创建一个新文件;如果文件已存在,则覆盖原有内容。
	ios::app:以追加模式打开文件,只能进行写操作。如果文件不存在,则创建一个新文件;如果文件已存在,则在原有内容的末尾追加新内容。
	ios::ate:以定位模式打开文件,可以进行读写操作。如果文件不存在,则创建一个新文件;如果文件已存在,则将文件指针定位到文件末尾。
	ios::binary:以二进制模式打开文件,可以进行读写操作。这个模式会忽略换行符等特殊字符,按照字节流的方式处理文件。
	ios::trunc:以截断模式打开文件,只能进行写操作。如果文件不存在,则创建一个新文件;如果文件已存在,则删除原有内容。
	*/
	//这里fp没有进行.open()的操作,说明是以默认的方式打开(构造函数的方式)

	if (!fp)//打开失败:若打开失败,则fp为NULL
	{
		cerr << "打开文件失败\n" << endl;
		return 0;
	}

	fp << "hello world";//写入fp指向的文件

	static char str[100];//防止str里的内容被改变

	fp.seekg(ios::beg);//将指针定位到文件头
	fp >> str;
	cout << str << endl;

	fp.close();/**/

	return 0;
}

恭喜你啦,今天又进步了一点点~

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脑子不好的小菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值