0

C ++で空のファイルを読み取るにはどうすればよいですか?

空のファイルを読み取るために使用する while ループ条件は何ですか?

!fin.eof()条件が機能せず、無限ループが作成されるためです。

私はターボ c++ を使用しており、2 つのファイルがあります。音楽ライブラリ ファイルには既にいくつかのアルバムがあります。繰り返されるアルバムを除外して削除し、フィルターファイルに追加する必要があります。

私のコードは次のとおりです。

void albumfilter()
{
    song s;
    album a;

    ifstream fin;
    fstream finout;

    fin.open("Musiclibrary.txt", ios::binary);

    while(!fin.eof())
    {
        fin.read((char*)&s,sizeof(s));
        if(fin.eof())
        break;

        finout.open("Filteralbum.txt", ios::binary| ios::in| ios::out);

        while(!finout.eof())
        {
            finout.read((char*)&a, sizeof(a));

            if(strcmp(a.getfilter_albumname(), s.getalbum())!=0)
            {
                strcpy(a.getfilter_albumname(),s.getalbum());
                 finout.write((char*)&a, sizeof(a));
                finout.close();
            }
        }
    }

    fin.close();
}

このコードは正しいですか?

4

3 に答える 3

7

eof()ファイルの終わりを越えて読み取ろうとした場合にのみ設定されます。少なくとも 1 回は読み取ろうとする必要があります。からstd::basic_ios::eof:

この関数は、最新の I/O 操作によって設定されたストリームの状態を報告するだけで、関連するデータ ソースは調べません。たとえば、最新の I/O がファイルの最後のバイトを返す get() だった場合、eof() は false を返します。次の get() は何も読み取らず、eofbit を設定します。そうして初めて eof() は true を返します。

于 2012-09-04T13:38:26.420 に答える
5

空でないファイルを読み取るのと同じように、ループの条件として読み取り操作を行います。コードは自明である必要があります。

std::vector<std::string> lines;
std::ifstream file("file.x");

if (file.is_open()) {

    while (std::getline(file, line)) {  // you can use operator>> here, too
        lines.push_back(line);
    }

    if (file.bad() || file.fail()) {
        std::cout << "An error occured during reading.";
    } else if (lines.empty()) {
        std::cout << "The file is empty.";
    }

} else {
    std::cout << "Couldn't open file.";
}

operator>>s以外のものを読み取るために使用するとstd::string、エラー チェックのロジックが変更されます。ループが終了し、eof がまだ設定されていない可能性があります。(s を読み込んでint、抽出操作の途中で数字以外の文字列に遭遇したとします)。これを考慮する必要があります。

于 2012-09-04T13:40:07.343 に答える
-1
       ifstream fin("empty-file.txt");
       string line;
       while(true){
            fin>>line;
            if(fin.eof())break;
       }

これでいいと思います。しかし、なぜ空のファイルを読みたいのでしょうか?

于 2012-09-04T14:21:58.660 に答える