Tôi phải xóa vài trăm tệp trong mã C của mình. Tôi sử dụng "loại bỏ" trong một vòng lặp. Có cách nào nhanh hơn để làm điều đó hơn là sử dụng "xóa" không? Tôi hỏi điều này bởi vì tôi không thể cung cấp cho wildchars bằng cách sử dụng "loại bỏ".xóa tệp khỏi mã C
Trả lời
Không, không có cách nào nhanh hơn sử dụng remove()
- hoặc unlink()
trên hệ thống POSIX - trong một vòng lặp.
Hệ thống rm
cũng thực hiện điều đó - ít nhất là trong trường hợp đơn giản, không đệ quy nơi tên được đặt trên dòng lệnh. Vỏ mở rộng các siêu ký tự, và rm
(in) nổi tiếng đi cùng xóa những gì nó đã nói để xóa, không biết về các ký hiệu tai hại *.*
được sử dụng trên dòng lệnh. (Trong trường hợp đệ quy, nó sử dụng một chức năng như nftw()
đi qua cấu trúc thư mục trong các cuộc gọi sâu-đầu tiên trật tự và lặp đi lặp lại để unlink()
để loại bỏ các tập tin và rmdir()
để loại bỏ các) thư mục (bây giờ có sản phẩm nào.)
POSIX cung cấp chức năng (glob()
và wordexp()
) để tạo danh sách tên tệp từ siêu ký tự như được sử dụng trong vỏ (POSIX), cộng với fnmatch()
để xem liệu tên có khớp với mẫu hay không.
Không phải '*' giống như '*. *', Hay có sự khác biệt nào đó không? Khi mọi người đề cập đến một khải huyền 'rm', họ luôn có vẻ sử dụng' *. * ' –
Trong Windows' *. * 'Là cần thiết; trên Unix, '*' là đủ (thực sự, tàn phá hơn '*. *' vì '*' đơn giản khớp với nhiều tên hơn). Tôi đã tranh luận nhẹ về cái nào để sử dụng và (tốt hơn hay tệ hơn) đã chọn '*. *'. Cả hai đều là tin xấu. (Và "catmlysm" tồi tệ nhất mà tôi thấy là xóa tài khoản cho một người dùng tạm thời được tạo bằng root '/' làm thư mục chính của họ; lệnh 'remove user' đã xóa mọi thứ trong thư mục chính của họ. hệ thống có thể chạy sau khi mất các tệp quan trọng. May mắn thay, đó là một hệ thống hoàn toàn mới và đã có bản sao lưu từ ngày hôm trước.) –
Cảm ơn bạn đã nhập. Tôi có thể tạo ra các tên tập tin mà không có bất kỳ vấn đề. Mối quan tâm duy nhất của tôi là phát hành lệnh "remove" nhanh hơn. – Kitcha
Bạn có thể sử dụng system
để sinh ra một vỏ có thể thực hiện * mở rộng cho bạn. Điều này có lẽ sẽ không chạy nhanh hơn chỉ gọi unlink() trong một vòng lặp, mặc dù, bởi vì nó sẽ phải sinh ra một trình bao (bắt đầu một quá trình mới). Nhưng nó sẽ dễ dàng hơn để viết mã.
- 1. C# Designer: Xóa mã dự phòng khỏi Design.cs
- 2. Xóa tệp khỏi C:/ProgramData trong Windows 7 không thực sự xóa tệp?
- 3. Xóa tệp khỏi tập hợp
- 4. Xóa tệp .xcdatamodel khỏi Xcode?
- 5. Cách xóa tệp khỏi Gist?
- 6. Xóa tệp khỏi SubVersion/SmartSVN
- 7. Xóa số khỏi văn bản bằng C#
- 8. cách xóa tệp khỏi thùng amazon s3?
- 9. Xóa điều khiển asp.net khỏi mã sau
- 10. Xóa hướng dẫn khỏi mã Java bytecode
- 11. Xóa nhiều BOM khỏi một tệp
- 12. Xóa tệp khỏi hàng đợi tải lên?
- 13. C# Xóa danh sách khỏi danh sách
- 14. Xóa đường dẫn khỏi tên tệp
- 15. Xóa dữ liệu khỏi tệp HDF5
- 16. Xóa dòng mới khỏi cuối tệp
- 17. Xóa N byte cuối cùng khỏi tệp
- 18. Cách xóa phần tử xml khỏi tệp?
- 19. Xóa tệp khỏi Mercurial MQ Patch
- 20. Xóa tiện ích khỏi tên tệp
- 21. Cách xóa tệp khỏi php: // temp wrapper
- 22. PHP: xóa tên tệp khỏi đường dẫn
- 23. Xóa các tệp đã xóa khỏi lịch sử git
- 24. Cách xóa tệp đã bị xóa khỏi .git?
- 25. C# xóa các mục khỏi danh sách
- 26. Xóa khóa khỏi bản đồ C++
- 27. Xóa cờ khỏi C++ FLAGS trong Makefile?
- 28. Xóa các dòng trùng lặp khỏi tệp văn bản?
- 29. Buộc xóa tất cả các tệp khỏi một thư mục
- 30. Xóa CSS không sử dụng khỏi mã trang web
Tại sao bạn không kết quả của một ls bên trong vòng lặp để bạn sẽ không phải nhập tất cả các tên – lc2817
Vấn đề là, có 50000 tệp trong thư mục đó. Tôi phải xóa chỉ một vài trong số họ khi cần thiết. "xoá" hoạt động tốt cho tôi nhưng phải mất một lúc để hoàn thành nó. Tôi đang tìm thứ gì đó nhanh hơn. Tôi không muốn gọi các lệnh shell từ "C" nếu tôi có thể thực hiện tương tự trong "C". – Kitcha
Bạn có thể sử dụng python không? :) – lc2817