C ++在创建后无法打开文件

时间:2018-03-10 23:49:02

标签: c++

我正在尝试创建一个程序,然后使用此代码打开它。

//Make the file
std::ifstream  src(a, std::ios::binary);
std::ofstream  dst(b, std::ios::binary);

dst << src.rdbuf();

//Execute it
Execute((LPCTSTR)b.c_str());

功能执行:

bool Execute(LPCTSTR Process)
{
STARTUPINFO         sInfo;
PROCESS_INFORMATION pInfo;

ZeroMemory(&sInfo, sizeof(sInfo));

sInfo.cb = sizeof(sInfo);

ZeroMemory(&pInfo, sizeof(pInfo));

if (!CreateProcess(Process, "open", NULL, NULL, false, 0, NULL, NULL, &sInfo, &pInfo))
{
    return 0;
}

return 1;
}

我已经测试过制作文件,当我打开文件时,它可以正常工作,没有任何问题。我尝试了执行功能,它工作正常,而不是一个问题。但是当我因为某种原因将这两个结合起来时它就不会执行了。

如果有人能告诉我为什么和/或如何解决这个问题会非常有帮助。

谢谢。

2 个答案:

答案 0 :(得分:0)

问题解决了,事实证明这非常简单,因为我只需关闭游戏,因为&#34; Killzone Kid&#34;指出。

答案 1 :(得分:0)

也可以输入完整的答案。基本上,如果ofstream未关闭,则createProcess会失败。以下是要测试的示例代码:

#include <iostream>
#include <string>
#include <fstream>
#include <windows.h>

bool Execute(LPCTSTR Process)
{
    STARTUPINFO sInfo = {};
    sInfo.cb = sizeof(sInfo);
    PROCESS_INFORMATION pInfo = {};

    return CreateProcess(Process, NULL, NULL, NULL, FALSE, CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &sInfo, &pInfo);
}

int main()
{
    std::wstring src_name(L"C:\\Windows\\system32\\notepad.exe");
    std::wstring dst_name(L"C:\\Users\\KK\\Desktop\\mynotepad.exe");

    std::ifstream src(src_name, std::ios::binary);
    std::ofstream dst(dst_name, std::ios::binary);

    dst << src.rdbuf();

    src.close();
    dst.close(); // has to be closed before execution

    if (!Execute(dst_name.c_str()))
    {
        std::cout << "ERROR: " << GetLastError() << std::endl;
    }

    return 0;
}

评论dst.close();会产生错误。