Chào chúng ta sẽ quan sát và theo dõi khóa đào tạo và huấn luyện xây dựng trực con đường ngôn từ C++.

Bạn đang xem: Đọc chuỗi từ file trong c++

Mình đang trình bày đến các bạn một trong những làm việc cơ bạn dạng cùng với tệp tin Khi thực hiện thỏng viện cstdio (trong ngữ điệu xây dựng C), áp dụng thư viện này, họ sẽ thực hiện một con trỏ hình trạng FILE làm cho cầu nối trung gian giữa lịch trình của chúng ta và tệp tin, số đông thao tác làm việc bên trên file phần đông yêu cầu thực hiện con trỏ phong cách FILE này. Trong bài học này, những các bạn sẽ cùng mình tham khảo thêm một số trong những cách để thao tác làm việc với tệp tin bằng phương pháp sử dụng các stream cơ mà ngôn từ C++ cung cấp.

Nlỗi mình giới thiệu ngơi nghỉ bài học kinh nghiệm trước, nhằm thao tác làm việc với tệp tin vào ngữ điệu C++, chúng ta áp dụng các class như ifstream (file input), ofstream (file output), hoặc fstream (tệp tin input/output) cùng dữ liệu sẽ được truyền đi một cách tuần từ bỏ qua những đối tượng người sử dụng của các stream này, để lấn sân vào tệp tin hoặc đi tự file ra công tác.

File input

Đầu tiên bạn thích reviews mang đến các bạn một số thao tác phát âm dữ liệu trường đoản cú file sử dụng class fstream nhưng ngôn từ C++ cung ứng. Để thực hiện class này, chúng ta bắt buộc include file fstream vào file cmùi hương trình:

#include Do class ifstream và ofstream phần lớn được quan niệm phía bên trong tệp tin fstream, cần bọn họ chỉ cần include tlỗi viện fstream là hoàn toàn có thể sử dụng cả hai class này.

Bây giờ họ thuộc tạo thành một đối tượng người sử dụng tệp tin input nằm trong mẫu mã ifstream:

std::ifstream fileInput("C:/Users/ADMIN/Desktop/my_document.txt");File mà bạn muốn gọi có tên là my_document.txt trong thư mục Desktop bên trên máy tính xách tay của chính bản thân mình. Class ifstream có rất nhiều thủ tục khởi sản xuất khác nhau, nhưng lại dễ dàng tuyệt nhất là chúng ta truyền vào trong 1 string là đường truyền chính xác của tệp tin bọn họ phải đọc dữ liệu. Nếu file kia phía trong thư mục nhưng mà công tác được build ra thì bạn có thể áp dụng đường dẫn kha khá.

Bây giờ đồng hồ bản thân vẫn bình chọn coi đối tượng fileInput của chính mình đã liên kết được mang đến file phải msinh hoạt hay không bằng cách sau:

if (fileInput.fail())std::cout << "Failed lớn open this file!" << std::endl;Phương thơm thức fail đang trả về false nếu đối tượng người sử dụng của ifstream không links cho file được. Và đúng là nó dường như không link được với tệp tin.

*

Đó là do vào thư mục Desktop của mình chưa tồn tại tệp tin my_document.txt nào cả. Bây giờ đồng hồ mình tạo nên một tệp tin my_document.txt chưa tồn tại dữ liệu trong thư mục Desktop, công tác không thể thông báo lỗi gì nữa.

Như chúng ta thấy, bọn họ áp dụng các phương thức được tư tưởng vào class ifstream, yêu cầu họ chỉ cần áp dụng thành viên selection operator (.) nhằm Hotline các cách tiến hành đang tư tưởng sẵn.

Xem thêm: Hướng Dẫn Cài Đặt Tài Khoản Email Và Gửi Email Trên Iphone /Ipad (Ios)

Một điều bọn họ nên để ý Lúc thao tác làm việc phát âm ghi tệp tin với ngữ điệu C là họ luôn luôn cần Điện thoại tư vấn hàm đóng góp tệp tin fcthua ngay trong khi không còn thực hiện đến tệp tin nữa. Đối cùng với các stream giải pháp xử lý tệp tin vào C++ thì đơn giản và dễ dàng hơn, khi thoát khỏi phạm vi kân hận lệnh, destructor sẽ từ bỏ Điện thoại tư vấn cách thức cthảm bại và tệp tin stream vẫn tự động hóa đóng góp lại.

Do kia, các bạn có thể cách xử trí như sau (hoặc không cần thiết cũng được):

std::ifstream input("C:/Users/ADMIN/Desktop/my_document.txt");if (input đầu vào.fail())std::cout << "Failed lớn open this file!" << std::endl;return -1;//read or write data in heređầu vào.close(); //we can forget this lineBây giờ đồng hồ mang đến phần cách xử trí gọi dữ liệu tự tệp tin, dữ liệu từ file đang truyền qua stream vào các trở thành vào công tác. Nhưng đầu tiên, mình bắt buộc thêm một số trong những tài liệu vào tệp tin my_document.txt trước. Nội dung của file my_document.txt nlỗi sau:

1 2 3 4 5Mình sẽ sở hữu công tác gọi tài liệu tự tệp tin thông qua đối tượng người tiêu dùng fileInput với in ra screen nlỗi sau:

#include #include int main()std::ifstream fileInput("C:/Users/ADMIN/Desktop/my_document.txt");if (fileInput.fail())std::cout << "Failed to open this file!" << std::endl;return -1;while (!fileInput.eof())int n;fileInput >> n;std::cout << n << " ";std::cout << std::endl;fileInput.close();return 0;Mình vẫn áp dụng extraction operator (>>) để mang dữ liệu từ tệp tin vào lưu giữ vào vươn lên là n và sau đó in ra màn hình trải qua đối tượng người dùng std::cout. trước khi, các bạn nhập dữ liệu từ keyboard, dữ liệu kia sẽ được giữ tạm thời vào stdin nơi đâu đó trong máy tính, với áp dụng đối tượng người sử dụng cin để mang tài liệu vào phát triển thành. Bây giờ đồng hồ, tài liệu sẽ có sẵn trong file, bọn họ chỉ việc chế tạo ra một đối tượng người tiêu dùng trực thuộc vẻ bên ngoài ifstream và link cho file, tiếp đến áp dụng toán thù tử (>>) để mang dữ liệu vào trở thành. Cách vận động hoàn toàn tương tự nhau đề xuất không những bạn?

Tuy nhiên, họ cần phải biết rõ cấu trúc tổ chức tài liệu phía bên trong file là ra làm sao nhằm tách những ngôi trường phù hợp nước ngoài lệ xảy ra. lấy ví dụ như mình không thay đổi kết cấu lịch trình nlỗi trên cùng sửa lại tệp tin my_document.txt tất cả văn bản nlỗi sau:

1 2 3 4 5 a b c

Thử chạy lại công tác trên, công tác vẫn lâm vào tình thế chứng trạng lặp vô hạn. Đó là vì phong cách tài liệu nhưng họ chọn để lưu lại quý giá đọc tự tệp tin là số nguim, mà lại vào tệp tin lại lộ diện những kí từ. Do kia, Lúc đọc không còn số nguyên ổn trong file, các kí trường đoản cú cần yếu gửi vào trở nên n được vì chưng lỗi định hình, vòng lặp while bắt buộc dứt bởi chúng ta đặt điều kiện là phát âm cho tới lúc kết thúc file.

Để khắc chế tình trạng này, chúng ta buộc phải đánh giá dữ liệu đọc từ file gửi vào công tác tất cả đúng định dạng hay là không, chúng ta cũng có thể làm nlỗi sau:

std::ifstream fileInput("C:/Users/ADMIN/Desktop/my_document.txt");if (fileInput.fail())std::cout << "Failed lớn open this file!" << std::endl;while (!fileInput.eof())int n;if (fileInput >> n)std::cout << n << " ";elsereturn -2;std::cout << std::endl;fileInput.close();system("pause");return 0;Nhấn F5 để chạy công tác bên dưới chế độ Debug, bọn họ vẫn thấy lịch trình tạm dừng lúc gọi xong cực hiếm 5 với trả về quý hiếm -2 đến hệ quản lý điều hành. Mình đang áp dụng if statement nhằm soát sổ xem extraction operator dành được thực hiện đúng hay không.

Nếu chúng ta vẫn ý muốn hiểu cục bộ tài liệu trong tệp tin và in ra screen, chúng ta cũng có thể đọc từng kí tự trong tệp tin vào đổi mới kiểu dáng char, thế vì chưng đẳng cấp số nguyên:

while (!fileInput.eof())char c;if(fileInput >> c)std::cout << c << " ";std::cout << std::endl;Tiếp theo, họ thuộc thử đọc từng chiếc tài liệu vào file vào các đối tượng người tiêu dùng std::string và in bọn họ màn hình. Mình biến hóa nội dung file my_document.txt thành nlỗi sau:

This is line 1This is line 2This is line 3This is line 4This is line 5Dưới đấy là một biện pháp xử trí để gọi từng chiếc tài liệu với in ra màn hình:

while (!fileInput.eof())char temp<255>;fileInput.getline(temp, 255);std::string line = temp;std::cout << line << std::endl;Mình sẽ sử dụng cách thức getline tất cả sẵn trong class ifstream để gọi tài liệu tự file và đưa vào trong 1 C-style string gồm size thắt chặt và cố định đến trước, kế tiếp dùng C-style string đó đưa vào đối tượng người tiêu dùng của std::string nhằm giảm form size bộ nhớ dư vượt.

Nếu thực hiện extraction operator (>>) nhằm hiểu tài liệu cùng std::string trực tiếp, bọn họ sẽ chạm chán phải trường hòa hợp kí từ khoảng tầm trắng không hiểu được như Khi sử dụng đối tượng người sử dụng std::cin.

Ngoài một trong những giải pháp đọc dữ liệu từ bỏ file trải qua đối tượng người sử dụng của class ifstream mà bản thân nói bên trên, bọn họ còn rất nhiều bí quyết không giống, cùng với không hề ít thủ tục khác mà class ifstream đã hổ trợ. Việc chọn lựa cách như thế nào để hiểu dữ liệu còn nhờ vào vào cấu tạo tài liệu được tổ chức triển khai bên phía trong file ra sao.

Các chúng ta cũng có thể xem thêm về tlỗi viện ifstream trên đường truyền sau:

http://www.cplusplus.com/reference/fstream/ifstream/

File đầu vào modes

Cũng giống như nlỗi thao tác mlàm việc links mang lại tệp tin nghỉ ngơi vào ngôn ngữ C, tệp tin input đầu vào stream vào C++ cũng được cho phép bọn họ chọn kiểu nhằm msống file. Dưới đây là một vài mode hoàn toàn có thể cần sử dụng được đến file input stream:

*

Nếu bọn họ chế tạo links đến tệp tin thông qua đối tượng của class ifstream, mode std::ios::in được thực hiện mặc định. Tuy nhiên, khi thực hiện tệp tin input/output stream cùng với class fstream thì chúng ta đề nghị chọn mode cho đối tượng người tiêu dùng, ví dụ:

std::fstream fileInput("C:/Users/ADMIN/Desktop/my_document.txt", std::ios::in);if (fileInput.fail())std::cout << "Failed to lớn open this file!" << std::endl;while (!fileInput.eof())char temp<255>;fileInput.getline(temp, 255);std::string line = temp;std::cout << line << std::endl;std::cout << std::endl;fileInput.close();Trong khi, họ cũng hoàn toàn có thể mở tệp tin dưới dạng nhị phân:

std::fstream fileInput("C:/Users/ADMIN/Desktop/my_document.txt", std::ios::in | std::ios::binary);Đọc tài liệu dưới dạng nhị phân rất có thể được vận dụng cho cả tệp tin nhị phân hoặc tệp tin văn uống bạn dạng.

Sử dụng một đầu vào stream mang lại những file

Cũng nlỗi câu hỏi họ tạo thành link tới file với cùng 1 đường dẫn ví dụ cùng sử dụng cách tiến hành cthất bại nhằm đóng stream, bọn họ cũng rất có thể thực hiện cách tiến hành open để tạo thành một stream new cho một đường dẫn không giống. Ví dụ:

std::ifstream fileInput("C:/Users/ADMIN/Desktop/my_document.txt");//..............fileInput.close();fileInput.open(""C:/Users/ADMIN/Desktop/my_document2.txt"");//..............fileInput.close();Phương thơm thức open hoạt động tương tự như thủ tục khởi sinh sản của class ifstream, nên bạn có thể tạo liên kết nhiều lần. Tuy nhiên, chúng ta chỉ hoàn toàn có thể kết nối mang lại một file độc nhất vô nhị trên một thời điểm. Và trước lúc tạo nên link mang đến file khác, họ nên đóng góp links trước kia.

Tổng kết

Thao tác gọi tài liệu từ file thông qua những file đầu vào stream nhưng C++ hỗ trợ khá dễ dàng và đơn giản so với áp dụng thỏng viện cstdio vào ngôn từ C. Các bạn có thể tìm hiểu thêm vô số cách thức phát âm dữ liệu tự file không giống qua topic dưới đây: