строка с данными статического файла не записывается во временный файл c ++ - PullRequest
0 голосов
/ 04 января 2019

Несколько дней назад я смотрел видеофайл о grep и подумал: «Почему бы мне не сделать свою собственную версию на c ++?». Поэтому я начал писать код, но столкнулся с проблемой в самом начале программы, когда все данные в сохраненном файле (в моем случае txt) должны быть скопированы во временный файл (тот, с которым вы работаете), моей строковой переменной, не записывающей во временный файл, хотя данные сохраненного файла были успешно помещены в строку. Я пытался несколько раз изменить способ записи строки во временный файл (используя классическую команду <<, используя запись, используя fputs и используя fputc), но ничего из этого не работает. Вот код: </p>

#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();
}

Есть предложения?

EDIT:

Я нашел параллельное решение для этого, не создавая временный файл с использованием 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() );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...