cuốn sách gpt4 ai đã làm

c - Sắp xếp scandir() theo thời gian tạo

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 23:48:32 25 4
mua khóa gpt4 Nike

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;}
}

câu trả lời hay nhất

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.)

Về c - sắp xếp scandir() theo thời gian tạo, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/26838044/

25 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress