C++ C++;使用tmpnam的文件IO永久临时文件

C++ C++;使用tmpnam的文件IO永久临时文件,c++,ofstream,C++,Ofstream,我正在尝试创建两个临时文件以供写入和读取,然后在程序完成时将其销毁。我已经看到了tmpfile,这将非常好,但我也想知道该文件的名称。我已经阅读了stream的文档,但我认为我的实现不正确。我想做的是: 创建一个具有两个成员变量的类,这两个变量的类型分别为char xFile[64]和char yFile[64] 在构造函数中,我放置:std::tmpnam(xFile);std::tmpnam(yFile)。这会将类似于/y3s3的c字符串分配到xFile中 我使用一个方法打开文件并添加一个字

我正在尝试创建两个临时文件以供写入和读取,然后在程序完成时将其销毁。我已经看到了
tmpfile
,这将非常好,但我也想知道该文件的名称。我已经阅读了stream的
文档,但我认为我的实现不正确。我想做的是:

  • 创建一个具有两个成员变量的类,这两个变量的类型分别为
    char xFile[64]
    char yFile[64]
  • 在构造函数中,我放置:
    std::tmpnam(xFile);std::tmpnam(yFile)
    。这会将类似于
    /y3s3
    的c字符串分配到xFile中
  • 我使用一个方法打开文件并添加一个字符串
  • xFile.good()每次的计算结果都是false
  • 在第三点,我写了一些

    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";
        }
    
    }
    
    void filemng::makeXCopy(std::string text){
    //事实上,我也尝试过fsteam和ifstream,在黑暗中拍摄
    std::ofstream xfile(xfile,std::ofstream::out);
    如果(!xfile.good()){
    
    std::cerr以下是使用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;
    }
    
    #包括
    #包括
    #包括
    #包括
    int main()
    {
    字符名[255]=“/tmp/mytempfile_uuxxxxxx”;
    int fd=mkstemp(名称);
    如果(fd>0){
    printf(“已创建%s\n”,名称);
    写入(fd,“某些数据a\n”,strlen(“某些数据a\n”);
    关闭(fd);
    }否则{
    printf(“失败的\n”);
    }
    返回0;
    }
    

    请注意“xxxxxx”在传递给MKSTMP的字符串中,将替换一些使字符串在目录中唯一的唯一字符串。< /P>使用MKSTEMP是安全的。从C++开始,已经过去一年了。抱歉,在使用TMPNM时,它填充了唯一的文件名。是否需要使用FString或OFFROW或IFFILE创建实际文件?是的,但最好是U。se mkstempa根据您发布的文档
    tmpnam()
    需要数组的大小
    L\u tmpnam
    char xFile[L\u tmpnam];
    (但可能不是导致错误的原因).mkstemp是tmpnam的安全替代品。谢谢。我是否应该使用类似于
    tmpnam
    的方法来创建文件名的唯一部分?对于Windows中的临时目录,我是否需要使用win32 API函数之一来尝试查找临时目录?否。如您所见“xxxxxx”提供给mkstemp的字符串/tmp/mytempfile\uuxxxxxx中的部分将被替换。前缀部分不会被触碰。因此,您也可以传递类似“/home/user/abcd/somename\uxxxxxx”的内容。在这种情况下,文件是在目录/home/user/abcd中创建的,名称类似于somename\n3VvAE