无法复制文件然后在c ++中执行它

时间:2016-10-03 11:17:28

标签: c++ std

我想复制一个文件然后用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。但作为一个非常初学者,我不明白在这种特殊情况下如何做到这一点。有人可以帮忙吗?

1 个答案:

答案 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");
}

或者,将开始和结束放在一个单独的函数中,这就是我在这种情况下所做的。然后,函数体是范围。如果你只需要做一次就可能过度设计。