Nhập tệp tin Google Tôi tìm thấy hai cách để nhập văn bản từ một tập tin - fopen và ifstream. Dưới đây là hai đoạn trích. Tôi có một tập tin văn bản bao gồm một dòng với một số nguyên tôi cần phải đọc in Tôi có nên sử dụng fopen hoặc ifstream?Đọc một tập tin văn bản - fopen và ifstream
ĐOẠN 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);
}
ĐOẠN 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";
}
Tại sao không 'void stream_reader (FILE * stream) {fgets (dòng, len, luồng); đặt (dòng); } 'về cơ bản giống hệt nhau? –
Có thể tạo một 'FILE *' mà không cần gọi hàm fopen hoặc tmpfile không? Tôi không tin được, nhưng tôi có thể sai. Vì hoạt động của 'stream_reader' chỉ yêu cầu một luồng, chứ không phải một tệp, tôi không muốn overconstrain nó bằng cách yêu cầu nó có một' FILE * '. Trong các bài kiểm tra đơn vị, nó có thể dễ dàng hơn để truyền cho nó một luồng chuỗi thay vì một 'FILE *', ví dụ. –
Có, từ quan điểm đó, phiên bản C bị ràng buộc chặt chẽ hơn - không có điều khoản cho 'FILE *' đề cập đến chuỗi thay vì tệp, ít nhất là trong tiêu chuẩn (mặc dù một số thư viện đã cung cấp/sử dụng) ít nhất là nội bộ, trong một thời gian dài). Nếu bạn * thực sự * cần phải tránh điều đó, bạn có thể chuyển một con trỏ tới một hàm để thực hiện việc viết, nhưng nó chắc chắn vụng về. –