C ++ File Input / Output Console Вывод - PullRequest
1 голос
/ 10 января 2020

У меня вопрос, как заставить консоль правильно отображать содержимое файла B на основе приведенной ниже информации.

Ниже приведен код, который я создал для базовых c операций ввода / вывода файла. Я пытаюсь скопировать содержимое файла fileA в файл B. После того, как это сделано, я пытаюсь отобразить содержимое файла B до cout. Код запускается и обновляет содержимое файла B до того, что было сохранено в файле A. Однако консоль не отображает новое содержимое файла B. Это просто показывает пустое поле.

#include <iostream> // Read from files
#include <fstream>  // Read/Write to files
#include <string>
#include <iomanip>

void perror();

int main()
{
    using std::cout;
    using std::ios; 


    using std::ifstream;
    ifstream ifile; // ifile = input file
    ifile.open("fileA.txt", ios::in);

    using std::ofstream;
    ofstream ofile("fileB.txt", ios::out); // ios::app adds new content to the end of a file instead of overwriting existing data.; // ofile = output file

    using std::fstream;
    fstream file; // file open fore read/write operations.

    if (!ifile.is_open()) //Checks to see if file stream did not opwn successfully. 
    {
        cout << "File not found."; //File not found. Print out a error message.
    }
    else
        {
        ofile << ifile.rdbuf(); //This is where the magic happens. Writes content of ifile to ofile.
        }

    using std::string; 
    string word; //Creating a string to display contents of files.

    // Open a file for read/write operations
    file.open("fileB.txt");

    // Viewing content of file in console. This is mainly for testing purposes. 
    while (file >> word)
    {
        cout << word << " ";
    }


    ifile.close();
    ofile.close();
    file.close();
    getchar();
    return 0; //Nothing can be after return 0 in int main. Anything afterwards will not be run.
}

fileA.txt

1
2
3
4
5

fileB.txt (файл изначально является пустым текстовым документом).

fileB.txt (после выполнения кода)

1
2
3
4
5

Ответы [ 2 ]

0 голосов
/ 10 января 2020

ofile будет иметь внутренний буфер, и если он не очищен и вы записываете только небольшой объем данных (возможно, до 64 КБ), то никакие данные не будут записаны в ваш выходной файл, пока вы не вызовете ofile.close() или в конце main().

Просто переместите ofile.close() до file.open("fileB.txt").

0 голосов
/ 10 января 2020

Это происходит потому, что вы не закрыли объект oFile до того, как откроете FileB.

ofile.close();
file.open("fileB.txt");

После этого у вас будет доступ к обновленному файлу.

Я надеюсь, что это тебе поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...