7

私はここSOでifstreamの質問を何度も繰り返してきましたが、単純なテキストファイルを読むのにまだ問題があります。VisualStudio2008を使用しています。

これが私のコードです:

// CPPFileIO.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <fstream>
#include <conio.h>
#include <iostream>
#include <string>

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{

    ifstream infile;
    infile.open("input.txt", ifstream::in);

    if (infile.is_open())
    {
        while (infile.good())
            cout << (char) infile.get();
    }
    else
    {
        cout << "Unable to open file.";
    }
    infile.close();
    _getch();
    return 0;
}

の値をチェックして、input.txtファイルが正しい「作業ディレクトリ」にあることを確認しましたargv[0]。Openメソッドは機能しません。

デバッグにも問題があります-時計をオンに設定できないようにする必要がありますinfile.good()infile.is_open()?私は得続けます

Error: member function not present.

編集: .CPPファイルからの完全なコードでコードリストを更新しました。

更新:ファイルは現在の作業ディレクトリにありませんでした。これは、プロジェクトファイルが配置されているディレクトリです。そこに移動すると、VS.NETでデバッグするときに機能します。

4

5 に答える 5

8

オープンモードを指定するときは、ビットごとのOR演算子を使用してみてください。

infile.open ("input.txt", ios::ate | ios::in);

openmodeパラメータはビットマスクです ios::ate追加のためにファイルを開くためにios::in使用され、入力を読み取るためにファイルを開くために使用されます。

ファイルを読みたいだけの場合は、おそらく次のように使用できます。

infile.open ("input.txt", ios::in);

ifstreamのデフォルトのオープンモードはios::inなので、これを完全に取り除くことができます。次のコードは、g++を使用して機能しています。

#include <iostream>
#include <fstream>
#include <cstdio>

using namespace std;

int main(int argc, char** argv) {
    ifstream infile;
    infile.open ("input.txt");

    if (infile)
    {
        while (infile.good())
            cout << (char) infile.get();
    }
    else
    {
        cout << "Unable to open file.";
    }
    infile.close();
    getchar();
    return 0;
}
于 2009-04-28T16:39:16.350 に答える
6

Visual Studioによって、exeファイルがソースコードから離れてしまうことがあります。デフォルトでは、VSはexeファイルから始まるファイルのみを検索する場合があります。このプロセスは、ソースコードと同じディレクトリから入力txtファイルを取得するための簡単な手順です。IDEの設定を修正したくない場合。

using namespace std;

ifstream infile;

string path = __FILE__; //gets source code path, include file name
path = path.substr(0,1+path.find_last_of('\\')); //removes file name
path+= "input.txt"; //adds input file to path

infile.open(path);

うまくいけば、これは他の人が迅速な解決策を見つけるのに役立ちます。この設定を自分で見つけるのに少し時間がかかりました。

于 2012-11-04T12:21:07.300 に答える
1

コードに2つの問題が見つかりました。

a) "ios :: ate || ios ::in"=>の構文エラーは"ios:: ate | ios::in"である必要があります

b)「ios :: ate」はカーソルをファイルの終わりに設定します-したがって、読み始めても何も得られません

したがって、「ios :: ate」を削除するだけで、問題ありません:)

チャオ、クリス

于 2009-04-28T16:45:40.080 に答える
0
infile.open ("input.txt", ios::ate || ios::in);

||は論理演算子または演算子であり、ビット演算子ではありません(Bill The Lizzardが言ったように)。

だから私はあなたが同等のことをしていると思います:

infile.open ("input.txt", true);

(ios::ateもios::inも0でないと仮定します)

于 2009-04-28T16:40:52.650 に答える
0

使用してみてください:

ifstream fStm("input.txt", ios::ate | ios::in);

デバッグにも問題があります-「infile.good()」または「infile.is_open()」にウォッチを設定できないようにする必要がありますか?「エラー:メンバー関数が存在しません」というメッセージが表示され続けます。

適切なものは次のとおりです。

#include <fstream> 

于 2009-04-28T16:41:06.690 に答える