首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >将一个文件内容复制到另一个文件(C语言和C++代码)

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

作者头像
用户11039529
发布2024-03-25 15:33:33
发布2024-03-25 15:33:33
8720
举报
文章被收录于专栏:算法学习日常算法学习日常

fileCopy.c

代码语言:javascript
复制
//作用:将一个文件复制到另外一个文件
// 我的程序代码名: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

代码语言:javascript
复制
#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;
}

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • fileCopy.c
  • fileCopy.cpp
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档