ファイルの読み込みファイルの読み込みには、fopenとifstreamの2通りの方法があります。以下は2つのスニペットです。私は読み込む必要がある整数の1行からなるテキストファイルを持っています。私はfopenまたはifstreamを使うべきですか?テキストファイルの読み込み - fopenとifstream
SNIPPET 1 - FOPEN
FILE * pFile = fopen ("myfile.txt" , "r");
char mystring [100];
if (pFile == NULL)
{
perror ("Error opening file");
}
else
{
fgets (mystring , 100 , pFile);
puts (mystring);
fclose (pFile);
}
SNIPPET 2 - はifstream
string line;
ifstream myfile ("example.txt");
if (myfile.is_open())
{
while (myfile.good())
{
getline (myfile,line);
cout << line << endl;
}
myfile.close();
}
else
{
cout << "Unable to open file";
}
なぜ 'void stream_reader(FILE * stream){fgets(line、len、stream); puts(行); } '本質的に同じですか? –
fopenやtmpfileを使わずに 'FILE *'を作ることはできますか?私はそれが信じられないが、私は間違っているかもしれない。 'stream_reader'の操作はファイルではなくストリームを必要とするだけなので、' FILE * 'を必要とすることでそれを過剰に歪ませることはありません。ユニットテストでは、 'FILE * 'の代わりに文字列を渡す方が簡単かもしれません。 –
はい、そのような観点から、Cバージョンはより緊密に制約されています。少なくとも、標準でファイルではなく文字列を参照する 'FILE * 'の規定はありません(いくつかのライブラリは、少なくとも内部的に、かなりの時間)。あなたが本当にそれを避ける必要があるなら、関数へのポインタを渡して書くことができますが、間違いなく不器用です。 –