字符串与静态文件的数据不写入临时文件C ++

时间:2019-01-04 14:15:00

标签: c++ file-io

几天前,我观看了一个有关grep的计算机爱好者视频,并想:“为什么不使用c ++制作我自己的版本?”。 因此,我开始编写代码,但是在程序的开头我遇到了问题,当存储文件中的所有数据(以txt为例)都必须复制到临时文件(您使用的文件)中时,尽管已成功将存储文件的数据放入字符串中,但我的字符串变量的值未写入临时文件。 一旦将字符串写入临时文件的方式(使用经典<<命令,使用write,使用fputs和使用fputc),我就尝试进行更多更改,但是这些都不起作用。 这是代码:

#include <iostream>
#include <cstdio>
#include <fstream>
#include <string>

#pragma warning(suppress : 4996) //disable compiler error for use of deprecated function ( std::tmpnam )

std::fstream temp_file ( std::tmpnam(NULL) ); //creates temporay file

void tmp_init(std::fstream& static_file) { 
//copy all the contents of static_file into temporary file
    std::string line; //support string for writing into temporary file
    std::cout << "copying\n";
    while (std::getline(static_file, line)) 
    //writes into the support string until file is ended
        temp_file << line; //writes into temporary file with string
    std::cin.ignore(); //clears input buffer
 }

void output() { //output of temporary file
    std::cout << "Output:\n";
    std::string output_line; 
    //support string for output write the    output
    while ( std::getline(temp_file, output_line)) 
   //copies line to line from the temporary file in the support string
        std::cout << output_line; //output of support string
    std::cin.ignore();//clears input buffer
}


int main() {
    std::fstream my_file; //creates static file
    my_file.open("file.txt"); //open the file
    if (my_file.is_open()) std::cout << "Open\n"; 
    //Check if file is opened correctely
    tmp_init(my_file); 
    //copy all contents of the static file in the temporary_file
    output(); //output of temporary file
    std::cin.get();
}

有什么建议吗?

编辑:

我为此找到了一个并行解决方案,不是使用std :: tmpnan(NULL)创建一个临时文件,而是使用filename(〜+ static file filename)创建一个文件,然后使用std :: remove将其从硬盘驱动器中删除(临时文件名)。 在使用std :: remove()之前,请记住在临时文件上调用方法close()或不打算将其删除(这是因为在您对其调用close时创建了该文件,并且通过不执行删除操作将不会被删除)找不到文件,因此不会将其删除)。 代码:

class file : public std::fstream {
public:
std::string path;
    file(std::string&& file_path) {
        path = file_path;
        std::fstream::open(path, std::ios::out);
    }
};

int main() {
    file static_file("file.txt");
    file temp_file('~' + static_file.path);
    static_file.close();
    temp_file.close();
    std::remove(temp_file.path.c_str() );
}

0 个答案:

没有答案