Video: How to green the world's deserts and reverse climate change | Allan Savory 2025
Khi bạn mở một tệp tin bằng cách xây dựng một cá thể dòng chảy hoặc ifstream, bạn có thể sửa đổi cách mở tập tin bằng cách cung cấp cái được gọi là cờ. Về mặt máy tính, cờ chỉ đơn giản là một mặt hàng nhỏ có sự có mặt hoặc thiếu hiện diện nói lên một chức năng làm thế nào để làm điều gì đó. Với các lớp thượng lưu và các luồng ifstream, hàm được đề cập là hàm tạo. Một lá cờ trông giống như ios:: app nếu bạn đang sử dụng một trình biên dịch không tương thích hoàn toàn với ANSI hoặc trông giống như ios_base:: app nếu bạn đang sử dụng một trình duyệt hoàn toàn tương thích ANSI. Cờ cụ thể này có nghĩa là bạn muốn ghi vào một tệp, nhưng bạn muốn nối lại với bất kỳ dữ liệu hiện có nào có thể đã có trong một tệp tin. Bạn cung cấp cờ này như một đối số của hàm tạo cho dòng chảy, như trong một trong hai ví dụ sau:
outstream trong dòng ("AppendableFile.txt", ios:: app); ofstream outfile ("AppendableFile. txt", ios_base:: app);
Bạn có thể thấy rằng cờ được thêm như là một tham số thứ hai để các nhà xây dựng. Các cờ khác tồn tại bên cạnh ứng dụng và bạn có thể kết hợp chúng bằng cách sử dụng toán tử hoặc, |. Ví dụ, một lá cờ là ios:: nocreate (không được bao gồm trong các trình biên dịch mới hơn).Điều này có nghĩa là "chỉ mở tập tin nếu nó đã tồn tại. "Nghĩa là, không tạo tập tin nếu nó không tồn tại. (Nhớ rằng, thestream tạo ra một tệp tin nếu nó chưa tồn tại.) Nếu tập tin không tồn tại, việc mở sẽ thất bại, và khi bạn gọi fail, bạn sẽ nhận được một sự thật
. Đó là, hai cùng sẽ làm việc chỉ khi tập tin đã tồn tại, và cuộc gọi sẽ mở tập tin cho một hoạt động nối thêm. Nếu tập tin không tồn tại, tập tin sẽ không được tạo ra. Đây là một cuộc gọi mẫu: ofstream outfile ("… / MyFile. Txt", ios:: app | ios:: nocreate); nếu (outfile. thất bại ()) {cout << "không thể mở tập tin!" << endl; return 0;} outfile << "hi" << endl; outfile. gần(); Nếu MyFile. txt không tồn tại khi bạn chạy mã này, bạn sẽ nhận được thông báo Không thể mở tệp! Nhưng nếu MyFile. txt hiện tồn tại, ứng dụng mở nó, nối chuỗi Hi to nó, và cuối cùng đóng nó.
Nó chỉ ra rằng các lá cờ nocreate không có sẵn trong thư viện chuẩn mới. Bummer. Do đó mã chỉ hoạt động nếu bạn đang sử dụng một phiên bản cũ hơn của thư viện. Khi sử dụng trình biên dịch Code:: Blocks, bạn sẽ thấy thông báo lỗi sau:
lỗi: 'nocreate' không phải là thành viên của '; std:: ios '
Tuy nhiên, bạn sẽ muốn kiểm tra xem trình biên dịch cụ thể của bạn có chứa một thư viện hỗ trợ ios:: nocreate.Trình biên dịch của bạn có thể hỗ trợ nó anyway, ngay cả khi nó bao gồm các Thư viện Chuẩn mới. Là một thay thế cho ios:: nocreate, bạn có thể sử dụng mã sau đây (tìm thấy trong ví dụ FileOutput02):ifstream infile ("… / MyFile. Txt"); if (infile. failed ()) {cout << "không thể mở tập tin!" << endl; trở lại 0;} infile. gần(); ofstream outfile ("… / MyFile. txt", ios:: app); outfile << "hi" << endl; outfile. gần();
Trong trường hợp này, bạn bắt đầu bằng cách cố gắng mở tệp để đọc. Nếu tệp không tồn tại, bạn không thể đọc nó và mã thoát với thông báo lỗi. Nếu mã có thể đọc được từ tệp, tệp sẽ mở lại tệp để ghi. Đây là một workaround rườm rà, nhưng nó hoạt động.
Sau đây là danh sách các cờ có sẵn. Trước tiên, đây là những cái cho ios, trong trường hợp bạn đang sử dụng một trình biên dịch không phải là hoàn toàn ANSI:
ios:: app: Cờ này có nghĩa là bạn muốn mở một tập tin và nối vào nó.ios:: in: Bao gồm cờ này nếu bạn muốn đọc từ một tệp.
-
ios:: out
-
:
-
Bao gồm cờ này nếu bạn muốn ghi vào một tệp.
: -
Bao gồm cờ này nếu bạn muốn xoá nội dung của tệp tin trước khi ghi vào đó. Đó là sự đối lập của phụ thêm, và nó cũng là mặc định nếu bạn không đặc biệt bao gồm ios:: app. . ios:: nocreate
: -
ios:: noreplace :
-
Cờ này là đối lập của nocreate. Sử dụng cờ này nếu bạn chỉ muốn tạo một tệp mới. Nếu bạn sử dụng cờ này và tập tin đã tồn tại, tệp sẽ không mở, và lỗi đó sẽ trả về true .
Trong trường hợp này, mã cố gắng mở tập tin để đọc. Nếu tệp tồn tại, mã hiển thị thông báo lỗi và thoát. Nếu không, mã tạo ra một tệp mới và ghi vào đó.
Các cờ sau có sẵn trong trình biên dịch hoàn toàn ANSI!
ios:: ate: Sử dụng cờ này để đi tới cuối của tệp tin sau khi bạn mở nó. Thông thường, bạn sử dụng cờ này khi bạn muốn nối thêm dữ liệu vào tệp.
ios_base:: nhị phân: Sử dụng cờ này để xác định rằng tệp bạn đang mở sẽ giữ dữ liệu nhị phân - nghĩa là dữ liệu không đại diện cho chuỗi ký tự.-
ios_base:: in: Xác định cờ này khi bạn muốn đọc từ một tệp.
-
-
ios_base:: out: Bao gồm cờ này khi bạn muốn viết thư cho một tập tin.
ios_base:: trunc: Bao gồm cờ này nếu bạn muốn xóa sạch nội dung của một tập tin trước khi viết nó. -
ios_base:: app: Bao gồm cờ này nếu bạn muốn nối vào tệp. Đối lập với trunc - nghĩa là thông tin đã có trong tệp khi bạn mở nó sẽ ở lại đó.
-
-
Tại sao bạn cần một lá cờ và cờ ra? Dường như máy tính nên biết liệu bạn đang viết thư cho một tập tin hay đọc nó, tùy thuộc vào việc bạn sử dụng dòng chảy hay không. Câu trả lời cho lý do tại sao bạn có một lá cờ và một lá cờ ra là các lớp khác có sẵn bên cạnh dòng nước và dòng chảy.