Предположим, у меня есть файл, открытый с синтаксисом C
FILE* fp = fopen("whatever.txt", "w");
// Library function needs FILE* to work on
libray_function(fp);
// Now I'd like to copy the contents of file to std::cout
// How???
fclose(fp);
Я хотел бы иметь возможность скопировать содержимое этого файла в o ++ Cstream (например, stringstream
или, может быть, даже std::cout
). Как я могу это сделать?
Закройте это сначала.
fclose(fp);
Затем откройте снова
string line;
ifstream myfile ("whatever.txt");
if (myfile.is_open())
{
while ( myfile.good() )
{
getline (myfile,line);
cout << line << endl;
}
myfile.close();
}
Вы могли бы использовать ifstream
а также rdbuf()
:
#include <fstream>
#include <sstream>
std::ifstream in("whatever.txt");
std::ostringstream s;
s << in.rdbuf();
или же:
std::ifstream in("whatever.txt");
std::cout << in.rdbuf();
Вы открыли файл для записи. Вам все равно придется закрыть его и снова открыть, вы можете открыть его, как вам угодно (если хотите, в виде потока). Тогда все зависит от того, насколько вы заботитесь о производительности. Если вас это действительно волнует, вы должны читать его порциями (не менее 512 байт за раз). Если вам не важна производительность, вы можете прочитать один байт, выплюнуть один байт.