37

C ++の方法で、読み取り用にファイルを開きたい。私はそれをすることができる必要があります:

  • ある種の読み取り行機能を含むテキストファイル。

  • バイナリファイル。生データをchar*バッファに読み込む方法を提供します。

4

9 に答える 9

37

読み取りのみを行う場合は、を使用する必要がありifstreamます(ofstream書き込みには、、またはfstream両方に使用します)。

テキストモードでファイルを開くには、次の手順を実行します。

ifstream in("filename.ext", ios_base::in); // the in flag is optional

バイナリモードでファイルを開くには、「バイナリ」フラグを追加するだけです。

ifstream in2("filename2.ext", ios_base::in | ios_base::binary ); 

この関数を使用してifstream.read()、文字のブロックを読み取ります(バイナリモードまたはテキストモード)。関数(グローバル)を使用してgetline()、行全体を読み取ります。

于 2008-08-11T15:59:48.303 に答える
12

ニーズに応じて、これを行うには3つの方法があります。昔ながらのCの方法を使用して//を呼び出すか、C ++ fstream機能(fopen/ )を使用するか、MFCを使用している場合は、実際のファイル操作を実行する関数を提供するクラスを使用できます。freadfcloseifstreamofstreamCFile

これらはすべてテキストとバイナリの両方に適していますが、特定のリードライン機能を備えているものはありません。その場合、代わりに行う可能性が最も高いのは、fstreamクラス(fstream.h)を使用し、ストリーム演算子(<<および>>)または読み取り関数を使用してテキストのブロックを読み取り/書き込みすることです。

int nsize = 10;
std::vector<char> somedata(nsize);
ifstream myfile;
myfile.open("<path to file>");
myfile.read(somedata.data(), nsize);
myfile.close();

Visual Studio 2005以降を使用している場合は、従来のfstreamを使用できない場合があることに注意してください(わずかに異なる新しいMicrosoft実装がありますが、同じことを実現します)。

于 2008-08-11T15:58:06.980 に答える
0
**#include<fstream> //to use file
#include<string>  //to use getline
using namespace std;
int main(){
ifstream file;
string str;
file.open("path the file" , ios::binary | ios::in);
while(true){
   getline(file , str);
   if(file.fail())
       break;
   cout<<str;
}
}**
于 2019-04-13T08:54:48.390 に答える
0
#include <iostream>
#include <fstream>
using namespace std;

void main()
{
    ifstream in_stream; // fstream command to initiate "in_stream" as a command.
    char filename[31]; // variable for "filename".
    cout << "Enter file name to open :: "; // asks user for input for "filename".
    cin.getline(filename, 30); // this gets the line from input for "filename".
    in_stream.open(filename); // this in_stream (fstream) the "filename" to open.
    if (in_stream.fail())
    {
        cout << "Could not open file to read.""\n"; // if the open file fails.
        return;
    }
    //.....the rest of the text goes beneath......
}
于 2014-07-17T22:31:22.497 に答える
-2

fstreamは素晴らしいですが、もう少し深く掘り下げてRAIIについて説明します。

古典的な例の問題は、自分でファイルを閉じることを余儀なくされることです。つまり、このニーズに合わせてアーキテクチャを曲げる必要があります。RAIIは、C++の自動デストラクタ呼び出しを利用してファイルを閉じます。

更新:std :: fstreamはすでにRAIIを実装しているようですので、以下のコードは役に立ちません。後世のために、そしてRAIIの例として、ここに保管しておきます。

class FileOpener
{
public:
    FileOpener(std::fstream& file, const char* fileName): m_file(file)
    { 
        m_file.open(fileName); 
    }
    ~FileOpeneer()
    { 
        file.close(); 
    }

private:
    std::fstream& m_file;
};

これで、次のようにコードでこのクラスを使用できます。

int nsize = 10;
char *somedata;
ifstream myfile;
FileOpener opener(myfile, "<path to file>");
myfile.read(somedata,nsize);
// myfile is closed automatically when opener destructor is called

RAIIがどのように機能するかを学ぶことで、いくつかの頭痛の種といくつかの主要なメモリ管理のバグを節約できます。

于 2008-08-11T16:07:31.330 に答える