Mục lục:
Video: Nâng Cấp Ram Và Ổ cứng SSD Có Giúp Máy Tính Làm Đồ Hoạ Và Games Nhanh Hơn Không ? 2025
Truy cập tệp ngẫu nhiên trong lập trình C không liên quan đến số ngẫu nhiên. Thay vào đó, tập tin có thể được truy cập ở bất kỳ điểm nào ở đây, ở đó, và thậm chí cả yon. Loại truy cập này hoạt động tốt nhất khi tệp được đánh dấu bằng các bản ghi có cùng kích thước. Khái niệm hồ sơ mang lại các cấu trúc, có thể dễ dàng được ghi vào một tập tin và sau đó được lấy ra trở lại cá nhân, chọn lọc, hoặc tất cả cùng một lúc.
Cách đọc và tua lại
Khi bạn mở một tệp tin đầu tiên, vị trí con trỏ ở đầu tập tin, byte đầu tiên. Nếu bạn đọc một bản ghi 40 byte vào bộ nhớ, vị trí con trỏ là 40 byte ngay từ đầu. Nếu bạn đọc cho đến khi kết thúc tệp, vị trí con trỏ duy trì vị trí đó là tốt.
Vòng lặp while trong Tell and Rewind đọc trong hồ sơ từ trái phiếu. tập tin db. Tại dòng 28, hàm ftell () trả về vị trí con trỏ. Nếu nó lớn hơn một mục nhập (có nghĩa là mục nhập thứ hai đã được đọc), vị trí con trỏ được đặt lại vào đầu tập tin bằng chức năng rewind () ở dòng 29.
TELL AND REWIND#include # bao gồm # include int main () {struct entry {char actor [32]; năm int; tên char [32];}; struct trái phiếu đầu vào; FILE * a007; int đếm = 0; a007 = fopen ("bond. db", "r"); if (a007) {puts ("SPECTER wins!"); exit (1);} while (fread (& bond, sizeof (struct entry), 1, a007)) {printf ("% st% dt% sn", trái phiếu, diễn viên, trái phiếu năm, trái phiếu. if (ftell (a007)> sizeof (struct entry)) tua lại (a007); đếm ++; if (count> 10) break;} fclose (a007); return (0);}
Để xác định đúng sự bù đắp, một câu lệnh if so sánh kết quả từ hàm ftell () và toán tử sizeof trên mục cấu trúc. Hãy lưu ý rằng ftell () chỉ trả về một giá trị int dài, không phải là một số lượng cụ thể của cấu trúc.
Số biến, khai báo và khởi tạo tại Dòng 14, theo dõi bao nhiêu lần vòng lặp while lặp lại. Nếu không, chương trình sẽ lặp lại vô tận. Thật tồi tệ. Vì vậy, khi giá trị đếm lớn hơn 10, vòng lặp phá vỡ và sau đó tệp đóng lại và chương trình kết thúc.
Bài tập
1
: Nhập mã nguồn từ Tell and Rewind vào trình soạn thảo của bạn. Xây dựng và chạy để xem các chức năng ftell () và rewind () hoạt động như thế nào. Cách tìm một bản ghi cụ thể Khi một tệp có chứa tất cả các bản ghi có cùng kích thước, bạn có thể sử dụng hàm fseek () để gỡ bỏ bất kỳ mục riêng lẻ nào. Định dạng cho fseek () là
fseek (handle, offset, whence);
xử lý
là một tập tin xử lý, một con trỏ FILE đại diện cho một tập tin đó là mở để đọc.
offset là số byte từ vị trí bắt đầu, kết thúc, hoặc hiện tại trong một tệp tin. Và từ đó là một trong ba hằng số: SEEK_SET, SEEK_CUR hoặc SEEK_END để bắt đầu, vị trí hiện tại hoặc kết thúc của tệp. Miễn là tệp tin của bạn chứa các bản ghi có kích thước không đổi, bạn có thể sử dụng fseek () để gom bất kỳ bản ghi cụ thể nào, như thể hiện trong Tìm một Bản ghi cụ thể trong một Tệp. Tìm một bản ghi đặc biệt trong một tệp
#include #include #include int main () {struct entry {char actor [32]; năm int; tên char [32];}; struct trái phiếu đầu vào; FILE * a007; a007 = fopen ("bond. db", "r"); if (a007) {puts ("SPECTER wins!"); exit (1);} fseek (a007, sizeof (struct entry) * 1, SEEK_SET); fread (& bond, sizeof (struct entry), 1, a007); printf ("% st% dt% sn", trái phiếu, diễn viên, trái phiếu năm, trái phiếu. title); fclose (a007); return (0);}
Mã được hiển thị trong Tìm một bản ghi cụ thể trong một tệp lại khá giống với mã được hiển thị trong Liệt kê 22-9. Bổ sung lớn là hàm fseek (), được hiển thị ở dòng 21. Nó đặt vị trí con trỏ để chức năng fread () theo sau (tham khảo dòng 22) đọc trong một bản ghi cụ thể nằm bên trong cơ sở dữ liệu.
Tại dòng 21, hàm fseek () kiểm tra tệp tin được trình bày bằng cách xử lý a007. Việc bù đắp được tính bằng cách nhân kích thước của cấu trúc nhập cảnh.
Giống như một mảng, nhân với kích thước đó 1 sẽ tạo ra hồ sơ
thứ hai; nhân giá trị bằng 0 (hoặc chỉ xác định 0 trong hàm) để đọc bản ghi đầu tiên. Hằng số SEEK_SET đảm bảo rằng fseek () bắt đầu nhìn từ đầu tập tin.
Các hiệu ứng ròng của mã là hồ sơ thứ hai trong trái phiếu. tập tin db được hiển thị. Bài tập 2: Nhập mã nguồn từ Tìm một bản ghi cụ thể trong một tệp. Xây dựng và chạy để xem hồ sơ thứ hai.