编写自己的第一个cmd命令——copy命令
- 编译环境vs2019;
- 注意事项:由于拷贝过程可能会出现中文乱码,如果出现中文乱码,建议将系统设置为UTF-8编码;
- 注:只是cmd命令行copy命令的模仿版;
- 关于运行程序出现错误的解决方案末尾附上;
首先我们先来了解一下"int main(int argv,char* argc[])"参数的意义:
- 第一个参数表示命令行参数个数,如"copy student.txt stu.txt"为三个参数;
- 第二个参数表示命令,如argc[1]=copy, argc[2]=student.txt, argc[3]=stu.txt;
文件读写的一般操作:
- 建立输入/输出流对象,ifstream ifs/ ofstream ofs;
- 打开文件,ifs.open(“文件名”,打开方式)/ofs.open(“文件名”,打开方式);
- 判断文件是否打开成功,if(!ifs.is_open()){…打开失败的操作…},is_open()函数是流对象函数,打开文件成功返回true,否则返回false;
- 读/写文件操作;
//读文件第一种方式
char buf[1024]={0};
while(ifs>>buf)
{ cout<<buf<<endl; }
//第二种方式
char buf[1024]={0};
while(ifs.getline(buf,sizeof(buf)))
{cout<<buf<<endl;}
//第三种方式
string buf;
while(getline(ifs,buf))
{cout<<buf<<endl;}
//第四种
char c;
while(c=ifs.get()!=EOF)
{cout<<c;}
- 关闭文件,ifs.close()/ofs.close();
- 到这算是说完了,下面请看整体源代码:
#include <iostream>
#include <fstream>
using namespace std;
int main(int argv, char* argc[])
{
if (argv != 3)
{
cout << "命令格式不正确..." << endl;
}
else
{
//cout << argc[0] << endl;
//cout << argc[1] << endl;
//cout << argc[2] << endl;
cout << "是否写入文件" << argc[1] << ":y/n/a" << endl;
char keyChar;
cin >> keyChar;
if (!cin.fail()&&keyChar=='y'||keyChar=='Y')
{
ifstream ifs;
ofstream ofs;
ifs.open(argc[1],ios::in);
ofs.open(argc[2],ios::out);
if (!ifs.is_open())
{
cout << "打开文件" << argc[1] << "失败..." << endl;
return -1;
}
/*if (!ofs.is_open())
{
cout << "打开文件" << argc[2] << "失败..." << endl;
return -1;
}*/
char data[1024] = { 0 };
while (ifs.getline(data, sizeof(data)))
{
if (*data == '\n')
ofs << '\n';
ofs << data << endl;;
}
ifs.close();
ofs.close();
cout << "已复制 1个文件" << endl;
}
else
{
cout << "已复制 0个文件" << endl;
}
}
return 0;
}
运行错误解决方案
- 因为命令行命令不能在控制台运行,所以运行之后就会提示命令格式不正确;
- 解决方案:在cmd命令行中,用cd命令切换到该项目的Debug文件目录下,运行该命令,例如:my_copy student.txt stu.txt;
- my_copy是我的项目名称,就是编译后生成的文件名,my_copy.exe;
拷贝中文乱码解决方案
- 打开桌面上的控制面板(如果桌面上没有控制面板,按win+r输入control,然后按enter键即可进入,win键是你的电脑键盘上左下角的四个方块;)
- 选择时钟和区域 -》选择区域 -》选择管理 -》选择更改系统区域设置 -》将“Beta版:使用 Unicode UTF-8 提供全球语言支持(U)”打勾,然后点击确定,确定;
若本文对你有帮助,还望点个赞,谢谢。