VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 557|回复: 5

[已解决]关于c++编写exe小程序

[复制链接]
82_avatar_middle
最佳答案
0 
donate_vip 发表于 2021-3-9 21:00:35 | 显示全部楼层 |阅读模式
各位表哥们,我想写一个windowsapi的copy的exe小程序,但是无奈小弟才学c++,就是没有什么思路,这是我现在的代码,能够成功的复制。
  1. #include <windows.h>
  2. #include <tchar.h>
  3. #pragma comment(lib, "Urlmon.lib")
  4. int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPTSTR IpCmdLine, int nShowCmd)
  5. {
  6.         BOOL bret = CopyFile(_T("C:\\Users\\Public\\Downloads\\AA.txt"), _T("C:\\Users\\xinxin\\Desktop\\1234.txt"), FALSE);
  7.         if (bret)
  8.         {
  9.                 MessageBox(NULL, _T("复制成功"), _T("TIP"), MB_OK);
  10.         }
  11.         else
  12.         {
  13.                 MessageBox(NULL, _T("复制失败"), _T("TIP"), MB_OK);
  14.         }
  15.         return 0;
  16. }
复制代码

我希望后面就是这样运行 copy.exe filename newfilename。
但是我现在却不晓得怎么样用cin 把这2个参数传进去。
希望有表哥能为我解答,可能我的这个问题看起来很蠢很基础,我还是希望有表哥能帮帮我关于c++编写exe小程序
先谢谢各位表哥们啦!
最佳答案
31_avatar_small
2021-3-11 13:47:53
本帖最后由 cpp2019 于 2021-3-11 18:24 编辑

关于c++编写exe小程序
纯C++实现文件复制
  1. #include <iostream>
  2. #include <fstream>

  3. using namespace std;

  4. void copy_file(const char* origin, const char* target); //复制文件:origin->target

  5. int main(int argc, char **argv)
  6. {
  7.         if (argc != 3)
  8.         {
  9.                 cout << "参数错误, 参数一为源文件,参数二为目标文件\n";
  10.                 return -1;
  11.         }

  12.         copy_file(argv[1], argv[2]);

  13.         return 0;
  14. }

  15. void copy_file(const char* origin, const char* target)
  16. {
  17.         //读文件内容到缓冲区
  18.         ifstream file_read;
  19.         file_read.open(origin, ios::binary);
  20.         file_read.seekg(0, ios::end);
  21.         unsigned int fileorigin_size = static_cast<unsigned int>(file_read.tellg());
  22.         file_read.seekg(0, ios::beg);
  23.         char* buf = new char[fileorigin_size];
  24.         file_read.read(buf, fileorigin_size);
  25.         file_read.close();

  26.         //缓冲区内容写入新文件
  27.         ofstream file_write;
  28.         file_write.open(target, ios::binary);
  29.         file_write.write(buf, fileorigin_size);
  30.         file_write.close();

  31.         delete[]buf;
  32. }
复制代码


使用方法同上
  1. #include <windows.h>

  2. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPSTR lpCmdLine, int nShowCmd)
  3. {
  4.         LPWSTR *szArgv = NULL;
  5.         int nArgc = 0;

  6.         //MYCMD cmd = GetCmdLine(lpCmdLine);

  7.         szArgv = CommandLineToArgvW(GetCommandLine(), &nArgc);
  8.         if (nArgc != 3)
  9.         {
  10.                 MessageBox(NULL, L"参数错误, 参数一为源文件,参数二为目标文件", L"错误", MB_ICONERROR);
  11.                 goto exit;
  12.         }

  13.         if (!CopyFileW(szArgv[1], szArgv[2], FALSE))
  14.         {
  15.                 MessageBox(NULL, L"复制失败", L"错误", MB_ICONERROR);
  16.         }

  17. exit:
  18.         LocalFree(szArgv);
  19.         return 0;
  20. }
复制代码





上一篇:CInternetSession怎么检查当前连接状态
下一篇:学习C++0基础入门第36课,请教拷贝构造函数问题
31_avatar_middle
最佳答案
14 
在线会员 发表于 2021-3-11 13:47:53 | 显示全部楼层    本楼为最佳答案   
bestAnswer
本帖最后由 cpp2019 于 2021-3-11 18:24 编辑

关于c++编写exe小程序
纯C++实现文件复制
  1. #include <iostream>
  2. #include <fstream>

  3. using namespace std;

  4. void copy_file(const char* origin, const char* target); //复制文件:origin->target

  5. int main(int argc, char **argv)
  6. {
  7.         if (argc != 3)
  8.         {
  9.                 cout << "参数错误, 参数一为源文件,参数二为目标文件\n";
  10.                 return -1;
  11.         }

  12.         copy_file(argv[1], argv[2]);

  13.         return 0;
  14. }

  15. void copy_file(const char* origin, const char* target)
  16. {
  17.         //读文件内容到缓冲区
  18.         ifstream file_read;
  19.         file_read.open(origin, ios::binary);
  20.         file_read.seekg(0, ios::end);
  21.         unsigned int fileorigin_size = static_cast<unsigned int>(file_read.tellg());
  22.         file_read.seekg(0, ios::beg);
  23.         char* buf = new char[fileorigin_size];
  24.         file_read.read(buf, fileorigin_size);
  25.         file_read.close();

  26.         //缓冲区内容写入新文件
  27.         ofstream file_write;
  28.         file_write.open(target, ios::binary);
  29.         file_write.write(buf, fileorigin_size);
  30.         file_write.close();

  31.         delete[]buf;
  32. }
复制代码


使用方法同上
  1. #include <windows.h>

  2. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPSTR lpCmdLine, int nShowCmd)
  3. {
  4.         LPWSTR *szArgv = NULL;
  5.         int nArgc = 0;

  6.         //MYCMD cmd = GetCmdLine(lpCmdLine);

  7.         szArgv = CommandLineToArgvW(GetCommandLine(), &nArgc);
  8.         if (nArgc != 3)
  9.         {
  10.                 MessageBox(NULL, L"参数错误, 参数一为源文件,参数二为目标文件", L"错误", MB_ICONERROR);
  11.                 goto exit;
  12.         }

  13.         if (!CopyFileW(szArgv[1], szArgv[2], FALSE))
  14.         {
  15.                 MessageBox(NULL, L"复制失败", L"错误", MB_ICONERROR);
  16.         }

  17. exit:
  18.         LocalFree(szArgv);
  19.         return 0;
  20. }
复制代码

评分

参与人数 1驿站币 +2 收起 理由
58_avatar_small thzzl + 2 受教了,赞一下!

查看全部评分

19_avatar_middle
最佳答案
12 
在线会员 发表于 2021-3-10 03:33:17 | 显示全部楼层
cin是控制台的
winaip是窗口界面的 你非要用cin  申请一个控制台才行  要不你创建两个编辑框放路径也可以
70_avatar_middle
最佳答案
44 
在线会员 发表于 2021-3-10 09:57:24 | 显示全部楼层
对于win32窗口程序  IpCmdLine就是你命令行的输入
04_avatar_middle
最佳答案
0 
在线会员 发表于 2021-3-10 13:37:00 | 显示全部楼层
通过 lpCmdLine 参数获取对应的参数, lpCmdLine的数据类型是wchar_t*
32_avatar_middle
最佳答案
0 
在线会员 发表于 2021-3-12 17:59:51 | 显示全部楼层
新萌,过来学习学习!!!
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2021-5-9 04:14

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表