Googling input pliku Znalazłem dwa sposoby wprowadzania tekstu z pliku - fopen i ifstream. Poniżej znajdują się dwa fragmenty. Mam plik tekstowy składający się z jednej linii z liczbą całkowitą, którą muszę przeczytać. Czy powinienem używać Fopen lub Ifstream?Czytanie pliku tekstowego - fopen vs. 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";
}
Dlaczego nie 'void stream_reader (strumień FILE *) {fgets (linia, len, strumień); puts (linia); } 'być zasadniczo identyczne? –
Czy można utworzyć plik 'FILE *' bez wywołania fopen lub tmpfile? Nie wierzę, że tak jest, ale mogę się mylić. Ponieważ działanie 'stream_reader' wymaga tylko strumienia, a nie pliku, wolałbym go nie przesadzić, ponieważ wymaga' FILE * '. W testach jednostkowych łatwiej jest przekazać na przykład strumień ciągów zamiast 'PLIKU *'. –
Tak, z tej perspektywy wersja C jest bardziej ściśle ograniczona - nie ma przepisu na "PLIK" *, który odnosi się do ciągu znaków, a nie do pliku, przynajmniej w standardzie (chociaż niektóre biblioteki dostarczyły/wykorzystały to w przynajmniej wewnętrznie, przez jakiś czas). Jeśli * naprawdę * musisz tego uniknąć, możesz przekazać wskaźnik do funkcji do pisania, ale jest zdecydowanie bardziej niezgrabny. –