intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

All about File I/O in C++

Chia sẻ: H HQ | Ngày: | Loại File: PDF | Số trang:13

156
lượt xem
19
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tôi post bài này lên không dám qua mặt các “cao thủ”, mà chỉ để nói rằng trong diễn đ àn rất cần các bài post này để mọi ngư ời cùng học, và t ôi hi vọng là các cao thủ sẽ post các bài của mình lên để cho tôi học hỏi. Bài này sẽ giới thiệu về File I/O. 2/ Đọc từ file 5/ Xử lí file nhị phân 3/ Quản lý luồng I/O 6/ Một số hàm hữu dụng 1. Write To File. Chúng ta cùng xem chương trình đầu tiên nhé: #include void main() { ofstream WriteToFile(“first.txt”); WriteToFile...

Chủ đề:
Lưu

Nội dung Text: All about File I/O in C++

  1. All about File I/O in C++ ( B ài này mình lấy của anh CUONGUYEN ở trên ddth.com, bài này được viết từ năm 2002. Mình thấy khá hay nên tổng hợp lại cho các b ạn dễ tham khảo. Mình trích nguyên văn, chỉ thêm style thôi. Bài viết có 5 phần: 1/ Write to file 2/ Đọc từ file 3/ Quản lý luồng I/O 4/ Kiểm tra cờ trạng thái 5/ Xử lí file nhị phân 6/ Một số hàm hữu dụng ) Tôi post bài này lên không dám qua mặt các “cao thủ”, mà chỉ để nói rằng trong diễn đ àn rất cần các bài post này để mọi ngư ời cùng học, và t ôi hi vọng là các cao thủ sẽ post các bài của mình lên để cho tôi học hỏi. Bài này sẽ giới thiệu về File I/O. 1. Write To File. Chúng ta cùng xem chương trình đầu tiên nhé: #include void main() { ofstream WriteToFile(“first.txt”); WriteToFile
  2. WriteToFile
  3. thích ở phần sau). Do đó khi chạy chương trình, sẽ xuất hiện trên màn hình dòng chữ: “Hello World!” 3. Quản lý Iuồng I/O. Trong phần này chúng ta sẽ học về một số hàm hữu dụng. Phần trước chúng ta đã tạo một file bằng lệnh: ofstream File(“filename.txt”); Chúng ta có một cách khác đó là sử dụng hàm open(): ofstream File; File.open(“finename.txt”); Hàm open() nguyên dạng: void open(char *filename, [int open_mode]); trong đó tham số open_mode chỉ ra phương thức mở file. Nó có thể có các giá trị sau: + ios::in -> mở file để đọc. + ios::out -> mở file để ghi. + ios::app -> mở file để ghi vào cuối file. Nó gọi ios::out (?). + ios::ate -> mở file để ghi vào cuối. Nó không gọi ios::out (?). + ios::trunc -> xoá tất cả nội dung đã có. + ios::nocreate -> nếu file chưa tồn tại, sẽ không mở được. + ios::noreplace -> nếu file đã tồn tại, cố gắng mở sẽ gây lỗi. + ios::binary -> mở file binary. Ví dụ 1: #include void main() { ofstream WriteToFile(“first.txt”, ios::ate); WriteToFile
  4. WriteToFile.close(); } Kết quả là file “first.txt” (phần trước) có nội dung là: Hello World! I love you Nếu không có tham số ios::ate thì nội dung của file lúc trước sẽ bị xóa. Ví dụ 2: Nếu chưa có file “non_exit.txt”. #include void main() { ofstream File(“non_exit.txt”, ios::nocreate); if(!File) { cout
  5. ios::ate | ios::binary Sử dụng open_mode, chúng ta có thể vừa mở file để đọc và để ghi. Ví dụ: #include void main() { fstream File("second.txt",ios::in | ios::out); File
  6. File.seekg(ios::beg); để đưa “inside-pointer” về đầu file. Bạn có thể sử dụng các tham số cho hàm seekg() như sau: ios::beg – đưa “inside-pointer” về đầu file (có giá trị là 0). ios::end - đưa “inside-pointer” về cuối file. Nhưng tại sao tôi thấy tham số này luôn chỉ đến kí tự thứ 3 thế nhỉ (giá trị 2)? Hoặc bạn có thể dùng: File.seekg(4); -> “inside-pointer” chỉ đến kí tự thứ 4 kể từ đầu file (ký tự đầu là 0). File.seekg(-5,ios::end); -> đưa “inside-pointer” đến cuối file sau đó quay l ại 5 kí tự. Ví dụ: #include main() { ifstream File(“second.txt”); char ch; File.seekg(-5, ios:end); File.get(ch); cout str; cout
  7. Bạn có thể đọc từng line. Ví dụ: #include void main() { ifstream File(“first.txt”); char line[100]; //lưu trữ toàn bộ dòng vào biến này while(!File.eof()) { File.getline(line,100); cout ch; - Đọc từng line: File.getline(ch,dimension); Bây giờ chúng ta sẽ "check" xem file có mở được hay không: Cách 1: ofstream (ifstream) File("somefile.txt"); if(!File) { .... } Cách này đã được sử dụng ở một số ví dụ trước. Cách 2: Sử dụng hàm fail(): ofstream File("somefile.txt"); if(File.fail()) { ..... } Hàm fail() trả về giá trị 0 nếu có lỗi (không mở được file) hay 1 nếu không có lỗi. Để kiểm tra xem file đã được mở chưa ta dùng hàm is_open(). Hàm trả về 0 nếu file chưa được mở, 1 nếu file đã được mở. Ví dụ: ofstream File; File.open("file1.txt"); cout
  8. sẽ cho giá trị 1. 4. Kiểm tra cờ trạng thái I/O (I/O status-flag). Hệ thống I/O trong C++ nắm giữ các thông tin về kết quả của các toán tử I/O. Trạng thái hiện hành được lưu trữ trong một đối tượng kiểu io_state (tương tự open_mode) với những giá trị sau: + ios::goodbit: không có lỗi. + ios::eofbit: tới cuối file. + ios::failbit: lỗi không gây hại (non-fatal). + ios::badbit: lỗi gây hại (fatal). Có hai cách để nhận được thông tin về trạng thái I/O. Cách thứ nhất là gọi hàm rdstate(). Hàm này trả về trạng thái của cờ lỗi. Ví dụ, hàm rdstate() sẽ trả về giá trị ios::goobit nếu không có lỗi... Cách thứ hai là sử dụng một trong các hàm sau: bool bad() -> 1 nếu có lỗi badbit. bool eof() -> 1 nếu đến cuối file. bool fail() ->1 nếu có lỗi failbit. bool good() ->1 nếu không có lỗi. Ví dụ: ofstream File("somefile.txt"); if(File.bad()==1) { ..... } Khi một lỗi xảy ra, bạn có thể xoá bỏ lỗi đó (thiết lập lại cờ trạng thái). Để làm việc này bạn dùng hàm clear(arg), với arg là cờ trạng thái mà bạn muốn thiết lập khi có lỗi. Các ví dụ về cờ trạng thái: Ví dụ 1: Sử dụng hàm rdstate(). ifstream File("somefile.txt"); if(File.rdstate() == ios::eofbit) cout
  9. if(File.rdstate() == ios::goodbit) cout
  10. Ví dụ 1: Sử dụng hàm put() và get(). #include void main() { fstream File("iloveyou.txt",ios::out | ios::in | ios::binary); char ch; ch='o'; File.put(ch); //Đưa nội dung của ch vào file. File.seekg(ios::beg); //đến đầu file. File.get(ch); //đọc một ký tự cout
  11. ofstream File("test.txt"); File
  12. { //Nhớ là chúng ta đã có "Hello World" trong file "test.txt" ifstream File("test_file.txt"); static char arr[10]; File.getline(arr,10,'o');// Đọc cho tới khi gặp ký tự 'o' cout
  13. Ví dụ: #include void main() { ifstream File("test_file.txt"); char ch; File.get(ch); cout
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2