3

これを試すためにこの簡単なコードを作成しましfstream file ("....txt") たが、ファイルは空のままです! 誰か助けてくれませんか?(私が通常使用するすべてのファイルと名前空間を含む「自作」ヘッダーファイルがあることに注意してください)

この小さなプログラムは、File.txtからすべてを出力し、ブレークを使用して cin の進行状況を中断するために、ファイルに新しい行を入力する機会を与えます。しかし、私が言ったように、ファイルは空のままです

#include <myHead.h>

int main()
{
    string line;
    int i;
    fstream myFile ("File.txt");

    if (myFile.is_open())
    {
        while (getline(myFile,line))
        {
            cout << line << "\n";
        }

        line = "0";

        for(line;line!="break";cin >> line)
    {
        if(line != "break")
            myFile << line;
    }

        myFile.close();

    }
    else
        cout << "error, File.txt cannot be opened!";

    getch();
    return 0;
}
4

2 に答える 2

4

ファイルの読み取りが終了した後、ファイルは「ファイルの終わりに達しました」という状態になり、良くありませ

書き込み (追加) の前に、ストリームの状態をリセットする必要があります。これは、ストリーム メソッドで実現されますclear()

また、ファイルを入力と出力の両方として明示的に開くこともできます: ios::in | ios::out.

于 2013-11-13T16:45:53.363 に答える
0

すでに回答されていますが、入力を終了するより良いオプションを指摘したいと思います。そのようにする場合:

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

int main(void)
{
    std::fstream file("file");
    std::string buf;

    if (file.is_open())
    {
        std::cout << "READ:" << "\n\n";
        while (getline(file, buf))
        {
            std::cout << buf << "\n";
        }

        file.clear();

        std::cout << '\n' << "WRITE:" << "\n\n";
        while (getline(std::cin, buf))
        {
            file << '\n' << buf;
            file.seekp(0, file.end);
            file.seekg(0, file.end);
        }

        file.close();
    }
    else
    {
        std::cout << "error, file could not be opened.";
    }

    return 0;
}

Ctrl+Z + EnterWindows またはUNIX では、 を押してストリームを終了できますCtrl+D

于 2013-11-13T16:59:47.747 に答える