几天前,我观看了一个有关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() );
}