我需要修改用C ++编写的代码。该代码将打开文件authfile并向其中写入49个字节。如果文件已经存在,我需要确保现有数据将被覆盖。

原始代码首先删除了文件,然后创建了一个新文件。由于讨论之外的原因,我无法删除该文件,只需要确保它为空,然后再向其中写入新数据即可。

以下是写入数据的功能。如何修改它,以便文件的现有内容将被覆盖?

我想,我需要改变popen的选项

bool Util::add_mcookie(const std::string &mcookie, const char *display,
    const std::string &xauth_cmd, const std::string &authfile)
{
        FILE *fp;
        std::string cmd = xauth_cmd + " -f " + authfile + " -q";

        fp = popen(cmd.c_str(), "w");
        if (!fp)
                return false;
        fprintf(fp, "remove %s\n", display);
        fprintf(fp, "add %s %s %s\n", display, ".", mcookie.c_str());
        fprintf(fp, "exit\n");

        pclose(fp);
        return true;
}

最佳答案

popen更改为fopen,将pclose更改为fclosepopen / pclose用于打开/关闭进程。另外,看起来您正在创建带有标志的过程。您只需要给fopen文件路径

关于c++ - 在C++中覆盖文件(不追加),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27611029/

10-17 00:03