gpt4 book ai didi

具有用户定义输入的 C++ Robocopy

转载 作者:行者123 更新时间:2023-11-28 05:31:11 25 4
gpt4 key购买 nike

我是 C++ 的初学者,目前正在尝试编写一个小程序来帮助对网络设备进行 robocopy 备份,到目前为止,我已经编写了以下代码,但是当我尝试编译时出现以下错误:

31 '"ROBOCOPY//"<< oldname' 中的 'operator<<' 不匹配

我在使用 robocopy 的所有行中重复出现相同的错误,将不胜感激任何帮助。谢谢大家

#include <iostream>
#include <cstdlib>
using namespace std;



int main()
{
string oldname;
string newname;
string userid;
char response;


cout<<"Please input old device name eg XXXXXX\n";
cin>> oldname;

cout<<"Please input new device name eg XXXXXX\n";
cin>> newname;

cout<<"Please input userid eg SP12345\n";
cin>> userid;

cout<<"Does your current device contain a D: drive? Y or N?";
cin>> response;

if (response == 'Y')
{

std::system("ROBOCOPY //"<<oldname<<"/c$/Users/"<<userid<<"/Desktop //"<<newname<<"/C$/Users/"<<userid<<"/Desktop /MIR /w:0 /r:0");
std::system("ROBOCOPY //"<<oldname<<"/c$/Users/"<<userid<<"/Favorites //"<<newname<<"/C$/Users/"<<userid<<"/Favorites /MIR /w:0 /r:0");
std::system("ROBOCOPY //"<<oldname<<"/c$/Users/"<<userid<<"/My Documents //"<<newname<<"/C$/Users/"<<userid<<"/My Documents /MIR /w:0 /r:0");
std::system("ROBOCOPY //"<<oldname<<"/d$ //"<<newname<<"/C$/Users/"<<userid<<"/Desktop/D backup /MIR /w:0 /r:0";
}

else if (response == 'N')
{
std::system("ROBOCOPY //"<<oldname<<"/c$/Users/"<<userid<<"/Desktop //"<<newname<<"/C$/Users/"<<userid<<"/Desktop /MIR /w:0 /r:0;
std::system("ROBOCOPY //"<<oldname<<"/c$/Users/"<<userid<<"/Favorites //"<<newname<<"/C$/Users/"<<userid<<"/Favorites /MIR /w:0 /r:0;
std::system("ROBOCOPY //"<<oldname<<"/c$/Users/"<<userid<<"/My Documents //"<<newname<<"/C$/Users/"<<userid<<"/My Documents /MIR /w:0 /r:0;
}

system("pause");
}

最佳答案

首先,这个简单的语句是行不通的:

std::string str;
system(str); //<== expecting C-string

因为 system 需要一个以 null 结尾的 C 字符串,而不是 std::string。添加文本会使情况变得更糟:

system("text" + str);

编译器不知道如何处理它。

其次,system无法正确传递命令行参数。您需要 CreateProcessShellExecuteEx

您可能还必须传递应用程序的完整路径。示例:

#include <iostream>
#include <string>
#include <sstream>
#include <Windows.h>

void foo(std::string userid, std::string oldname, std::string newname)
{
std::stringstream ss;
ss << "c:\\Program Files (x86)\\Full Path\\Robocopy.exe"
<< " /c:\\users\\" << userid << "\\Desktop\\" << oldname
<< " /c:\\users\\" << userid << "\\Desktop\\" << newname
<< " /MIR /w:0 /r:0";

std::string commandLine = ss.str();

//examine the commandline!
std::cout << commandLine << "\n";

STARTUPINFOA si;
PROCESS_INFORMATION pi;
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
memset(&pi, 0, sizeof(pi));

char *buf = _strdup(commandLine.c_str());
CreateProcessA(0, buf, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
free(buf);
}

int main()
{
foo("x", "y", "z");
return 0;
}

关于具有用户定义输入的 C++ Robocopy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39483623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com