带有tmpnam的C ++文件IO持久临时文件

时间:2014-10-03 04:59:42

标签: c++ ofstream

我试图创建一些临时文件来编写和读取,然后在程序完成时销毁。我见过tmpfile,这会很棒,但我也想知道该文件的名称。我已经阅读了ofstream的文档但我并不认为我正确地执行了某些事情。我想做的事情:

  1. 创建一个包含两个类型为char xFile[64]char yFile[64]的成员变量的类。
  2. 在我的构造函数中:std::tmpnam(xFile); std::tmpnam(yFile)。这会将类似/y3s3的c字符串分配到xFile。
  3. 我使用方法打开文件并添加字符串。
  4. xFile.good()每次评估为false。
  5. 在第3点,我写了类似

    的内容
    void filemng::makeXCopy (std::string text) {
    
        // actually I've tried fsteam and ifstream as well, shot in the dark
        std::ofstream xfile(xFile, std::ofstream::out); 
    
        if(!xfile.good()) {
            std::cerr << "Failed to open xFile.\n";
        }
    
    }
    

    当然,当我运行它时,我看到&#34;无法打开xFile。&#34;我只是看不出我在这里做错了什么。

1 个答案:

答案 0 :(得分:0)

以下是使用mkstemp执行此操作的示例:

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main()
{
    char name[255] = "/tmp/mytempfile_XXXXXX";
    int fd = mkstemp(name);
    if (fd > 0) {
        printf("Created %s\n", name);
        write(fd, "some dataa\n", strlen("some dataa\n"));
        close(fd);
    } else {
        printf("Failed \n");
    }
    return 0;
}

请注意,传递给mkstmp的字符串中的“xxxxxx”将替换为一些唯一的字符串,该字符串将使文件名在目录中唯一。