Trong chương trình của tôi, tôi hiển thị một danh sách các tập tin. Bây giờ tôi đang sử dụng scandir với chức năng alphasort tích hợp nhưng tôi muốn sắp xếp dựa trên ngày tạo. Tôi đã viết hàm so sánh của riêng mình nhưng dù tôi có kiểm tra nó bao nhiêu thì nó cũng không hoạt động. Các mục xuất hiện theo thứ tự dường như ngẫu nhiên. Một số có thể được sắp xếp theo thứ tự, nhưng những tập tin cũ nhất có thể xuất hiện ở giữa. Ví dụ: giả sử tôi có kết quả đầu ra sau từ ls
22:39 ngày 9 tháng 11 tập tin1
19:40 ngày 9 tháng 11 tập tin2
19:39 ngày 9 tháng 11 tập tin3
19:09 ngày 9 tháng 11 tập tin4
Sau đó, tôi nhận được kết quả tương tự, không tăng dần cũng không giảm dần.
tập tin2
tập tin1
tập tin3
tập tin4
Tôi đã thử st_mtime và st_ctime vì tôi biết đôi khi không có ngày tạo. Nếu tôi nhìn vào đầu ra của "ls -lt" thì tôi thấy tất cả các tệp, có thời gian chính xác, được sắp xếp theo đúng thứ tự - vì vậy tôi biết những tệp này chứa thông tin tôi cần.
int datesort(const struct dirent** file1, const struct dirent** file2) {
cấu trúc thông tin thống kê1, info2;
stat((*file1)->d_name, &info1);
stat((*file2)->d_name, &info2);
double diff = difftime(info1.st_ctime, info2.st_ctime);
nếu (khác <0) {trả về -1;}
if (diff>0) {return 1;}
nếu (khác==0) {trả về 0;}
}
d_name
Chỉ tên file chứ không phải đường dẫn file. Vì thế chỉ số
Điều này sẽ chỉ thành công khi kiểm tra thư mục làm việc hiện tại. Nếu không, bạn sẽ chỉ số
một số tệp khác tình cờ có cùng tên với tệp trong thư mục đích, hoặc quét
sẽ trả về một lỗi.
Đó là một cách thực hành rất tốt để kiểm tra kết quả trả về lỗi của tất cả các cuộc gọi hệ thống. Nó có thể tiết kiệm nhiều giờ thời gian gỡ lỗi.
Ngoài ra, ngay cả khi được sửa, mã vẫn gọi nhiều lần trên cùng một tệp chỉ số
, điều này rất kém hiệu quả (mặc dù các hệ điều hành hiện đại thường lưu trữ số liệu thống kê và thậm chí cả thông tin về độ phân giải đường dẫn tệp, vì vậy nó không tệ như trước). Tốt hơn hết bạn nên sử dụng thư mục đọc
Nhận một vectơ thư mục chưa được sắp xếp và thu thập chúng một lần cho mỗi tệp chỉ số
, sau đó sắp xếp vectơ tệp theo vectơ thống kê (Ngoài ra, bạn có thể giữ bản đồ băm về thời gian tạo được lập chỉ mục theo nút, nhưng điều này sẽ đòi hỏi nhiều công việc hơn.)
Tôi là một lập trình viên xuất sắc, rất giỏi!