无法复制文件,然后在 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");
}

或者,将打开和关闭放在一个单独的函数中,这就是我在这种情况下所做的。那么,函数体就是作用域。如果你只需要做一次,可能设计过度了。