Lập trình C++

Tổng hợp các hàm xử lí file trong C++

Ở bài trước, Isinhvien đã giới thiệu đến các bạn các thao tác cơ bản với file như đóng mở, đọc ghi file để giúp các bạn làm quen với file trong C++. Và trong bài viết này, Isinhvien sẽ tiếp tục chia sẻ đến các bạn các hàm vô cũng tiện lơi giúp làm việc với file trở nên dễ dàng hơn bao giờ hết. Cùng bắt đầu ngay nhé!

Kiểm tra xem file đã được mở hay chưa trong C++

Trong ngôn ngữ C++, để kiểm tra xem file đã được mở hay chưa ta sẽ dùng hàm is_open(), hàm trả về true nếu file đã được mở thành công và ngược lại, trả về false nếu mở file thất bại.

Ví dụ:

#include <iostream>
#include <fstream>
using namespace std;
int main(){
    fstream file;
    file.open("file.txt", ios::out );

    if (file.is_open())
    cout << "Mo file thanh cong";
    else
    cout << "Mo fie that bai";
   
    return 0;
}

Kết quả thực thi:

Mo file thanh cong

Kiểm tra xem đã liên kết thành công đến file cần mở hay chưa trong C++

Để kiểm tra xem đã liên kết thành công đến file cần mở hay chưa, ta sẽ dùng phương thức fail(), phương thức fail sẽ trả về false nếu đối tượng của ifstream không liên kết đến file được và sẽ trả về true nếu đã liên kết thành công.


Ví dụ:

#include <iostream>
#include <fstream>
using namespace std;
int main(){
    fstream file;
    file.open("file.txt", ios::out );

    if (!file.fail())
    cout << "Lien ket den file thanh cong";
    else
    cout << "lien ket den file that bai";

    return 0;
}

Kết quả thực thi:

Lien ket den file thanh cong

Đọc và in ra từng dòng trong file C++

Khi ta muốn đọc và in ra từng dòng trong file, ta cần phải kiếm tra xem con trỏ đã trỏ đến cuỗi file hay chưa, nếu chưa thì tiếp tục đọc, ngược lại thì kết thúc. Để làm được điều này, ta sẽ dùng phương thức eof(), trả về true khi con trỏ đã trỏ tới cuối file và với false thì ngược lại.

Ví dụ:

#include <iostream>
#include <fstream>
using namespace std;
int main(){
    fstream file;
    file.open("file.txt", ios::out | ios:: in );

    if (file.is_open())
    cout << "Mo file thanh cong" << endl;
    else
    cout << "Mo file that bai" << endl;

    cout << "Noi dung cua file la: " << endl;

    string str;
    while(!file.eof())  //khi chưa tới cuối file thì tiếp tục đọc
    {
        getline (file, str);
        cout << str << endl;
    }
    file.close();
    return 0;
}

Kết quả thực thi:


Mo file thanh cong
Noi dung cua file la:
Isinhvien
Chuc cac ban nhieu suc khoe
Thanh cong trong cuoc song!

Với file.txt có nội dung như hình dưới:

Tổng hợp các hàm xử lí file trong C++ 3
Nội dung file.txt

Dịch chuyển con trỏ vị trí file trong C++

Để dịch chuyển con trỏ vị trí file thì ta sẽ sử dụng hàm seekg() với cú pháp như sau:

seekg(off_type, ios_base::seekdir);

Trong đó:

  • off_type: Số byte cần dịch (luôn luôn là một số nguyên, mỗi byte là một kí tự). Nếu là số âm thì sẽ dịch về bên tay trái, số dương thì dịch về bên tay phải
  • seekdir: Vị trí bắt đầu dịch. Nếu là beg thì sẽ bắt đầu ở vị trí đầu file, cur thì bắt đầu ở vị trí hiện tại, và end thì bắt đầu ở vị trí cuối file.

Ví dụ ta có file như hình dưới:

Tổng hợp các hàm xử lí file trong C++ 4
Nội dung file.txt

Sau đó thực thi đoạn chương trình sau:


#include <iostream>
#include <fstream>
using namespace std;
int main(){
    fstream file;
    file.open("file.txt", ios::out | ios:: in );

    if (file.is_open())
    cout << "Mo file thanh cong" << endl;
    else
    cout << "Mo file that bai" << endl;
    
    //dịch chuyển qua phải 3 byte bắt đầu từ đầu file
    file.seekg(3,ios_base :: beg );
    int x;
    file >> x;
    cout << x << endl;
    
    //dịch chuyển qua phải 3 byte bắt đầu từ vị trí hiện tại
    file.seekg(3,ios_base :: cur );
    file >> x;
    cout << x << endl;

    //dịch chuyển qua trái 1 byte bắt đầu từ cuối file
    file.seekg(-1,ios_base :: end );
    file >> x;
    cout << x << endl;

    file.close();
}

Kết quả thực thi:

Mo file thanh cong
35
23
3

Hàm cho biết vị trí con trỏ file trong C++

Để biết được vị trí con trỏ file đang ở đâu, ta dùng hàm tellg(), trả về vị trí tính theo byte mà con trỏ file đang ở.


Ví dụ:

#include <iostream>
#include <fstream>
using namespace std;
int main(){
    fstream file;
    file.open("file.txt", ios::out | ios:: in );

    if (file.is_open())
    cout << "Mo file thanh cong" << endl;
    else
    cout << "Mo file that bai" << endl;

    cout << "Vi tri con tro ban dau:" << file.tellg() << endl;

    file.seekg(3,ios_base :: beg );
    cout << "Vi tri con tro hien tai: " << file.tellg();
   
    file.close();
}

Kết quả thực thi:

Mo file thanh cong
Vi tri con tro ban dau:0
Vi tri con tro hien tai: 3

Hi vọng sau bài viết này thì các bạn sẽ thành thạo hơn về các hàm xử lí file trong C++ ! Nếu thấy bài viết này của Isinhvien hay và bổ ích thì hãy chia sẻ nó đến với bạn bè của mình để ủng hộ cho Isinhvien và giúp Isinhvien ngày càng phát triển hơn nhé! Chúc các bạn thành công!

Bài viết khác liên quan đến thao tác file c++


Mới nhất cùng chuyên mục

Back to top button
Close