我想复制一个文件然后用c ++执行它。也许使用c ++来完成可以通过简单脚本完成的任务并不聪明,但我只是想让程序一次完成所有事情。无论如何,代码看起来像
#include <cstdlib>
#include <iostream>
#include <fstream>
void input ()
{
std::ifstream src("path-to-file\\myFile.exe", std::ios::binary);
std::ofstream dst("myFile.exe", std::ios::binary);
dst << src.rdbuf();
system("myFile.exe -some -parameters");
}
int main ()
{
input ();
return 0;
}
(我在这里包含了很多代码,这些代码更容易为您复制“copy-pastable”)。当我运行它时,我看到错误消息:
The process cannot access the file because it is being used by another process.
我在这个网站和互联网上找不到任何解决方案。我发现的帖子只是关闭“关闭文件句柄”as it was written here。但作为一个非常初学者,我不明白在这种特殊情况下如何做到这一点。有人可以帮忙吗?
答案 0 :(得分:2)
问题是不要关闭文件。你至少有三种方法可以做到这一点。
一种是在系统调用之前用dst.close();
显式关闭它。
void input ()
{
std::ifstream src("path-to-file\\myFile.exe", std::ios::binary);
std::ofstream dst("myFile.exe", std::ios::binary);
dst << src.rdbuf();
dst.close();
system("myFile.exe -some -parameters");
}
更简洁的方法是在范围中放置和复制,以便变量dst
超出范围并调用其析构函数;它将被关闭。
void input ()
{
{
std::ifstream src("path-to-file\\myFile.exe", std::ios::binary);
std::ofstream dst("myFile.exe", std::ios::binary);
dst << src.rdbuf();
}
system("myFile.exe -some -parameters");
}
或者,将开始和结束放在一个单独的函数中,这就是我在这种情况下所做的。然后,函数体是范围。如果你只需要做一次就可能过度设计。