Несколько дней назад я смотрел видео о компьютерных файлах о grep и думал: «Почему бы мне не сделать свою собственную версию на c ++?».
Поэтому я начал писать код, но столкнулся с проблемой в самом начале программы, когда все данные в хранимом файле (в моем случае txt) необходимо скопировать во временный файл (тот, с которым вы работаете), моей строковой переменной, не записывающей во временный файл, хотя данные сохраненного файла были успешно помещены в строку.
Я пытался несколько раз изменить способ записи строки во временный файл (используя классический << команда, используя запись, используя 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), а создавая файл с именем файла (~ + имя файла статического файла), а затем удаляя его с жесткого диска с помощью std :: remove (временный файл). имя файла ).
Перед использованием std :: remove () не забудьте вызвать метод close () для временного файла или не собираетесь его удалять (это потому, что файл создается, когда вы вызываете close для него, и не делая этого, удалите won ‘ найти файл и, следовательно, не удалит его).
Код:
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() );
}
Задача ещё не решена.
Других решений пока нет …