Cách tìm kích thước của tệp trong lập trình C

Cach Tim Kich Thuoc Cua Tep Trong Lap Trinh C



Bạn chưa quen với lập trình C và đang tìm cách tìm kích thước của tệp? Đi đâu khác! Trong hướng dẫn này, bạn sẽ tìm hiểu quy trình tìm kích thước của tệp trong lập trình C. Số byte được sử dụng để chứa dữ liệu bên trong một tệp được gọi là kích thước của tệp. Bằng cách biết kích thước tệp, bạn có thể thực hiện các thao tác xử lý tệp khác nhau, bao gồm sao chép, đọc hoặc ghi.

Thông qua hướng dẫn từng bước được đề cập trong hướng dẫn này và các ví dụ về mã đơn giản, bạn có thể nhanh chóng tìm thấy kích thước của bất kỳ tệp nào.







Tìm kích thước của tệp trong lập trình C

Có nhiều cách khác nhau để tìm kích thước của tệp trong C được đề cập bên dưới.



1: Sử dụng hàm stat()

Trong C, phương pháp đơn giản nhất để tìm ra kích thước của tệp là sử dụng thống kê() chức năng gọi hệ thống. Các thống kê() chức năng truy xuất thông tin trạng thái tệp và lưu trữ nó trong một cấu trúc. Một trong những thành viên của cấu trúc này là st_size , cung cấp kích thước của tệp theo byte. Phương pháp này tránh phải di chuyển con trỏ tệp theo cách thủ công, giúp sử dụng dễ dàng hơn và ít bị lỗi hơn.



#include
#include

int chính ( )
{
cấu trúc thống kê st;
dài kích cỡ ;
nếu như ( thống kê ( 'C_File.txt' , & st ) == 0 )
{
kích cỡ = st.st_size;
bản inf ( 'Kích thước của tệp là %ld byte. \N ' , kích cỡ ) ;
}
trở lại 0 ;
}


Mã này truy xuất kích thước của một tệp có tên C_File.txt sử dụng thống kê() phương pháp từ thư viện. Các st_size phần tử của struct stat, trong đó hàm giữ thông tin về tệp và cho phép chúng tôi tìm kích thước tệp. Kích thước của tệp được giữ ở kích thước thay đổi, sau đó printf() được sử dụng để in kích thước lên bàn điều khiển cùng với thông báo. Trước khi thử truy cập vào st_size thuộc tính, câu lệnh if xác minh rằng thống kê() cuộc gọi chức năng đã thành công. Mã này sau đó trả về 0 để cho biết rằng nó đã chạy thành công.





đầu ra


2: Sử dụng Hàm fstat()

Một chức năng khác tương tự như thống kê() fstat() chức năng, tương đương với thống kê() nhưng hoạt động trên tệp đang mở thay vì tên tệp. Các fstat() chức năng truy xuất thông tin về tệp đang mở được mô tả bởi bộ mô tả tập tin truyền cho nó. Tham chiếu đến tệp đang mở được biểu thị bằng số nguyên bộ mô tả tập tin . tương tự như thống kê(), fstat() trả về thông tin trạng thái về tệp được cung cấp, bao gồm kích thước tính bằng byte.



#include
#include
#include

int chính ( ) {
int fd;
cấu trúc thống kê st;
fd = mở ( 'C_File.txt' , O_RDONLY ) ;
nếu như ( tình trạng ( fd, & st ) == - 1 ) {
bản inf ( 'Lỗi khi nhận thông tin tệp. \N ' ) ;
trở lại 1 ;
}
bản inf ( 'Kích thước của tệp là %ld byte. \N ' , st.st_size ) ;
đóng ( fd ) ;
trở lại 0 ;
}


Trong đoạn mã trên, tệp ban đầu được mở trong ví dụ này bằng cách gọi hàm mở() chức năng với tên tệp và O_RDONLY tùy chọn mở tệp ở chế độ chỉ đọc. MỘT bộ mô tả tệp (fd) được trả về bởi chức năng. Sau đó, chúng tôi sử dụng fstat() phương pháp để có được thông tin về tập tin, gửi nó như một con trỏ tới st cấu trúc làm tham số thứ hai và bộ mô tả tệp làm đối số đầu tiên. Các st cấu trúc là nơi chức năng này lưu giữ thông tin của tệp sau khi truy xuất.

Kích thước của tệp tính bằng byte, được lưu trong st_size thành viên của st cấu trúc, sau đó sẽ được in nếu không có lỗi khi sử dụng fstat() chức năng. Nếu không, nó sẽ in một thông báo lỗi.

đầu ra


3: Sử dụng Hàm fseek() và ftell()

Một phương pháp khác để tìm kích thước của tệp trong lập trình C là sử dụng fseek() ftell() chức năng. Các ftell() trả về vị trí hiện tại của con trỏ tệp, trong khi hàm fseek() di chuyển con trỏ tệp đến một vị trí nhất định trong tệp. Kích thước của tệp theo byte có thể được tìm thấy bằng cách sử dụng ftell() chức năng để có được vị trí hiện tại sau khi sử dụng fseek() Chức năng di chuyển con trỏ tệp về cuối tệp.

#include
#include

int chính ( )
{
TÀI LIỆU * fp;
dài kích cỡ ;

fp = fopen ( 'C_File.txt' , 'rb' ) ;
tìm kiếm ( fp, 0L, SEEK_END ) ;
kích cỡ = ftel ( fp ) ;
fđóng ( fp ) ;
bản inf ( 'Kích thước của tệp = %ld byte. \N ' , kích cỡ ) ;

trở lại 0 ;
}


Trong đoạn mã trên, sử dụng fopen() phương pháp, trước tiên ứng dụng sẽ mở C_File.txt ở chế độ nhị phân. Các fseek() chức năng sau đó sử dụng SEEK_END tùy chọn để di chuyển con trỏ tệp đến cuối tệp. Vị trí hiện tại của tệp, tương ứng với kích thước tính bằng byte, sau đó có thể được tìm thấy bằng cách sử dụng ftell() chức năng. Đoạn mã sau đó sử dụng fclose() phương pháp đóng tệp sau khi in kích thước của tệp lên bàn điều khiển.

đầu ra


4: Sử dụng hàm filelength()

Phương pháp tiếp theo là sử dụng thư viện quản lý tệp, thư viện này cung cấp nhiều chức năng thao tác tệp, bao gồm các chức năng lấy kích thước của một tập tin . Ví dụ, chức năng độ dài tệp () trả về độ dài của một tệp tính bằng byte, với tên tệp của nó. Chức năng này yêu cầu tệp tiêu đề .

Ngoài ra còn có một chức năng khác, _filelengthi64(), trả về độ dài của tệp tính bằng byte, đối với tệp lớn hơn 4 GB. Sự khác biệt giữa hai hàm là loại giá trị trả về của chúng, cho biết hàm có thể xử lý bao nhiêu byte.

#include
#bao gồm

int chính ( )
{
dài kích cỡ ;
than * fname = 'C_File.txt' ;
kích cỡ = độ dài tập tin ( thư mục số ( fopen ( tên, 'rb' ) ) ) ;
bản inf ( 'Kích thước của tệp = %ld byte. \N ' , kích cỡ ) ;

trở lại 0 ;
}


Kích thước của tập tin C_File.txt theo byte được mã này thu được bằng thư viện quản lý tệp Windows. Khi được cung cấp bộ mô tả tệp của tệp đã mở, phương thức độ dài tệp () trả về độ dài của tệp theo byte.

fopen() mở tệp ở chế độ nhị phân chỉ đọc trong mã này và thư mục số() trả về bộ mô tả tệp của tệp đã mở. Sau đó, printf() được sử dụng để in kích thước tập tin. Sau đó, hàm trả về 0 cho biết rằng nó đã được thực thi thành công.

đầu ra


Phần kết luận

Có một số phương pháp để tìm kích thước của một tệp tính bằng byte trong C , mỗi cái đều có ưu và nhược điểm riêng. Bốn phương pháp khác nhau được thảo luận trong hướng dẫn ở trên; thống kê() chức năng, fstat() chức năng, fseek() ftell() chức năng, và độ dài tệp () chức năng. Hiểu các chức năng này sẽ giúp người dùng tìm thấy kích thước của bất kỳ tệp nào trên hệ thống của bạn.