×

Trả về vị trí hiện tại của con trỏ tập tin với ftell() trong C

Trong lập trình C, một trong những tác vụ phổ biến khi làm việc với tệp là theo dõi và thao tác vị trí của con trỏ tập tin. Con trỏ này xác định vị trí cụ thể trong tệp nơi mà các hành động đọc hoặc ghi tiếp theo sẽ được thực hiện. Một trong những hàm hữu ích để truy vấn vị trí hiện tại của con trỏ tập tin là ftell().

Giới thiệu về ftell()

Hàm ftell() được sử dụng để trả về vị trí hiện tại của con trỏ tập tin dưới dạng một giá trị kiểu long int. Nếu thành công, hàm sẽ trả về giá trị dương, thể hiện điểm đến của con trỏ tính theo byte từ đầu tệp. Nếu xảy ra lỗi, hàm sẽ trả về giá trị -1L và thiết lập biến errno để chỉ định lỗi cụ thể.

Cú pháp

long int ftell(FILE *stream);
  • stream: là con trỏ đến đối tượng FILE đại diện cho tệp.

Sử dụng ftell() trong chương trình C

Để hiểu rõ hơn về cách sử dụng hàm này, hãy cùng xem ví dụ sau, minh họa việc mở một tệp, di chuyển con trỏ bên trong, và sử dụng ftell() để truy vấn vị trí hiện tại của con trỏ tập tin.

Ví dụ minh họa

#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *file;
    long int pos;

    // Mở tệp để đọc và ghi (tạo tệp nếu chưa tồn tại)
    file = fopen("example.txt", "w+");
    if (file == NULL) {
        perror("Error opening file");
        return EXIT_FAILURE;
    }

    // Ghi một số dữ liệu vào tệp
    fputs("Hello, World!\n", file);

    // Di chuyển con trỏ tập tin đến đầu tệp
    fseek(file, 0, SEEK_SET);

    // Lấy vị trí hiện tại của con trỏ tập tin
    pos = ftell(file);
    if (pos == -1L) {
        perror("Error obtaining position");
    } else {
        printf("Current position: %ld\n", pos);
    }

    // Đóng tệp
    fclose(file);

    return EXIT_SUCCESS;
}

Phân tích ví dụ

  1. Mở tệp: Chúng ta mở tệp "example.txt" với chế độ w+, cho phép đọc và ghi, và tạo tệp nếu nó chưa tồn tại.
  2. Ghi dữ liệu: Hàm fputs() được sử dụng để ghi một dòng văn bản vào tệp.
  3. Di chuyển con trỏ: Hàm fseek() với các đối số 0SEEK_SET di chuyển con trỏ tập tin về đầu tập tin.
  4. Truy vấn vị trí con trỏ: Hàm ftell() được sử dụng để lấy vị trí hiện tại của con trỏ tập tin. Kết quả được in ra màn hình.
  5. Đóng tệp: Cuối cùng, tệp được đóng lại bằng fclose().

Lưu ý

  • Khi sử dụng ftell(), nếu bạn thấy kết quả trả về là -1L, điều đó biểu thị một lỗi đã xảy ra. Luôn có kiểm tra lỗi để đảm bảo hoạt động của chương trình đúng đắn.
  • ftell() không chỉ hữu ích trong các thao tác đọc và ghi tuần tự, mà còn rất hữu ích trong việc ghi lại và điều hướng các vị trí khác nhau trong tệp để xử lý linh hoạt hơn.

Kết luận

Việc nắm vững cách sử dụng hàm ftell() giúp bạn có khả năng kiểm soát linh hoạt vị trí của con trỏ tập tin trong các chương trình C, tạo điều kiện thuận lợi cho việc xử lý tệp hiệu quả và chính xác.

Comments