巨菜的阿豪 2023-09-20 11:35 采纳率: 50%
浏览 10
已结题

python转c++代码,临时文件的建立



import tempfile
tempfilename = tempfile.mktemp('-gdal2tiles.vrt')
 # open as a text file
s = open(tempfilename).read()

python如上代码tempfile模块 c++中该用什么函数代替

2023.10.8后续编辑

#include<stdio.h>
//获取一个临时文件,fileName:文件名;return:临时文件路径
std::string self_getTmpFileName() {
    std::string original_backup_file = std::tmpnam(NULL);//生成临时文件
    return original_backup_file;
}
void self_deleteTmpFile(const std::string& fileName) {
    _unlink(fileName.c_str());//删除临时文件
}

目前使用上述方式进行临时文件的建立与删除,项目整体数据输入输出比对正确。

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-20 14:21
    关注

    【以下回答由 GPT 生成】

    在C++中,要实现与Python中tempfile.mktemp()相同的功能,可以使用std::tmpnam()函数或者std::tmpnam_s()函数。这两个函数可以在C++标准库的<cstdio>头文件中找到。

    std::tmpnam()函数会生成一个临时文件名,并且返回一个指向该文件名的C字符串指针。但是需要注意的是,std::tmpnam()不提供线程安全的保证,因此在多线程环境中使用时要特别小心。

    示例代码如下:

    #include <cstdio>
    
    int main() {
        char filename[L_tmpnam];  // 定义临时文件名的缓冲区
        std::tmpnam(filename);   // 生成临时文件名
    
        FILE* file = std::fopen(filename, "r");  // 打开临时文件
        if (file != nullptr) {
            // 获取文件内容
            std::fseek(file, 0, SEEK_END);
            long size = std::ftell(file);
            std::rewind(file);
            char* buffer = new char[size];
            std::fread(buffer, 1, size, file);
    
            // 在这里可以对文件内容进行操作
    
            // 删除临时文件
            std::fclose(file);
            std::remove(filename);
    
            // 释放内存
            delete[] buffer;
        }
    
        return 0;
    }
    

    值得注意的是,由于std::tmpnam()函数没有提供很好的线程安全保证,可以考虑使用std::tmpnam_s()函数来代替。std::tmpnam_s()函数有一个额外的参数,用于指定临时文件名的缓冲区大小,因此需要保证传入的缓冲区足够大。

    示例代码如下:

    #include <cstdio>
    
    int main() {
        char filename[L_tmpnam_s];  // 定义临时文件名的缓冲区
        std::tmpnam_s(filename, sizeof(filename));  // 生成临时文件名
    
        FILE* file;
        fopen_s(&file, filename, "r");  // 打开临时文件
        if (file != nullptr) {
            // 获取文件内容
            std::fseek(file, 0, SEEK_END);
            long size = std::ftell(file);
            std::rewind(file);
            char* buffer = new char[size];
            std::fread(buffer, 1, size, file);
    
            // 在这里可以对文件内容进行操作
    
            // 删除临时文件
            std::fclose(file);
            std::remove(filename);
    
            // 释放内存
            delete[] buffer;
        }
    
        return 0;
    }
    

    这样就可以在C++中实现与Python中tempfile.mktemp()相同的临时文件功能了。注意在使用临时文件时, 需要非常小心确保文件的安全性和合法性,以避免潜在的安全风险。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月8日
  • 已采纳回答 10月8日
  • 修改了问题 10月8日
  • 创建了问题 9月20日

悬赏问题

  • ¥15 angular项目错误
  • ¥20 需要帮我远程操控一下,运行一下我的那个代码,我觉得我无能为力了
  • ¥20 有偿:在ubuntu上安装arduino以及其常用库文件。
  • ¥15 请问用arcgis处理一些数据和图形,通常里面有一个根据点划泰森多边形的命令,直接划的弊端是只能执行一个完整的边界,但是我们有时候会用到需要在有很多边界内利用点来执行划泰森多边形的命令
  • ¥30 在wave2foam中执行setWaveField时遇到了如下的浮点异常问题,请问该如何解决呢?
  • ¥750 关于一道数论方面的问题,求解答!(关键词-数学方法)
  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件