无法复制文件,然后在 C++ 中执行它
Cannot copy a file and then execute it in c++
我想复制一个文件,然后用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.
我尚未在此站点和 Internet 上找到此问题的任何解决方案。只有 post 我发现大约 "closing the file handle" as it was written here。但是作为一个非常初学者,我不明白在这种特殊情况下该怎么做。有人可以帮忙吗?
问题是没有关闭文件。您至少有三种方法可以做到这一点。
一种是在系统调用前用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");
}
或者,将打开和关闭放在一个单独的函数中,这就是我在这种情况下所做的。那么,函数体就是作用域。如果你只需要做一次,可能设计过度了。
我想复制一个文件,然后用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.
我尚未在此站点和 Internet 上找到此问题的任何解决方案。只有 post 我发现大约 "closing the file handle" as it was written here。但是作为一个非常初学者,我不明白在这种特殊情况下该怎么做。有人可以帮忙吗?
问题是没有关闭文件。您至少有三种方法可以做到这一点。
一种是在系统调用前用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");
}
或者,将打开和关闭放在一个单独的函数中,这就是我在这种情况下所做的。那么,函数体就是作用域。如果你只需要做一次,可能设计过度了。