我正在尝试创建一个简单的文本文件到桌面,但我进入控制台:“访问被拒绝。”。我从Comand Line做同样的事情并没有错误。如果我在哪里打印路径,我会得到: “
C:/用户/亚历克斯 (这是一个新行) /Desktop/MyTextFile.txt
我知道当我通过 + = string 将字符串添加到另一个字符串时,我在两个字符串之间得到一个空格。任何帮助都是合情合理的!
string getClip() {
HANDLE clip;
string clip_text = "";
if (OpenClipboard(NULL))
{
clip = GetClipboardData(CF_TEXT);
clip_text = (char*)clip;
CloseClipboard();
return clip_text;
}
}
string getUser() {
system("echo %username% | clip");
string user = getClip();
return user;
}
void create_a_simple_txt_file() {
string username = getUser();
ostringstream path;
path << "C:/Users/" << username << "/Desktop/MyTextFile.txt";
system(("echo I successful Write something to my file > " + path.str()).c_str());
}
int main() {
create_a_simple_txt_file();
cin.get();
return 0;
}
答案 0 :(得分:3)
问题是使用system
和echo
命令:
system("echo %username% | clip");
echo
命令添加一个尾随换行符,使用clip
命令将其复制到剪贴板中,然后使用{{获取包含换行符的完整字符串1}}。
您可以通过完全不使用getClip
来解决此问题,而是使用GetUserName
Windows API函数获取用户名:
system
答案 1 :(得分:1)
我敢打赌你的问题出现在getUser()
函数中,即返回带有尾随换行符的用户名,而不是字符串连接(顺便说一下,不添加空格)。
在编辑问题后编辑:
正如我想的那样,问题在于你的getUser()函数,如果你在Windows操作系统上运行,请参阅“一些程序员老兄”回答它为什么是错误的以及可能的解决方案。
另一个问题可能是您尝试访问其他用户的桌面文件夹,而运行程序的用户没有权限。
另一个建议:您可能希望使用适当的C ++函数或fstream来写入文件,而不是使用system()
。
答案 2 :(得分:1)
您正在收到访问被拒绝错误,因为您正在处理垃圾数据。这条线
system(("echo I successful Write something to my file > " + path.str()).c_str());
创建一个临时字符串并获取指向其基础字符数组的指针。但在执行system()
调用之前,临时字符串将被销毁,指针将变为无效。
如果用cout
替换系统调用,则可以看到实际尝试执行的命令。对我而言,它类似于Ó╣iwµ
,它既不是有效的命令也不是有效的目录名。因此,访问被拒绝。
要解决该问题,请将临时字符串分配给变量,直到您使用它:
string s = ("echo I successful Write something to my file > " + path.str());
system(s.c_str());