Muszę usunąć kilkaset plików wewnątrz mojego kodu C. Używam "remove" w pętli. Czy jest jakiś szybszy sposób na to niż użycie "usunięcia"? Pytam o to, ponieważ nie mogę dać wildcharom za pomocą "usunięcia".usuwanie plików z kodu C
Odpowiedz
Nie, nie ma szybszej metody niż użycie remove()
- lub unlink()
w systemach POSIX - w pętli.
Komenda system rm
również to robi - przynajmniej w prostym, nierekurencyjnym przypadku, w którym nazwy są podane w linii poleceń. Powłoka rozszerza metaznaky i rm
(in) słynie z usuwania tego, co zostało mu nakazane, aby usunąć, nie wiedząc o zgubnej notacji, która została użyta w wierszu poleceń. (W rekurencyjnym przypadku, wykorzystuje funkcję taką jak nftw()
przemierzać strukturę katalogów w połączeniach głębokość pierwszego rzędu i powtarzających się unlink()
usunąć pliki i rmdir()
usunąć (teraz już pusty) katalogów.)
POSIX zapewnia funkcje (glob()
i wordexp()
) do generowania list nazw plików z metaznaków użytych w powłoce (POSIX) plus fnmatch()
, aby sprawdzić, czy nazwa pasuje do wzorca.
Czy "*" nie jest takie samo jak "*. *", Czy też jest jakaś subtelna różnica? Kiedy ludzie wymieniają apokalipsę 'rm', zawsze używają' *. * ' –
Pod Windows' *. * 'Było potrzebne; na Uniksie, '*' jest wystarczające (w rzeczywistości bardziej niszczące niż '*. *', ponieważ proste '*' pasuje do więcej nazw). Dyskutowałem marginalnie o tym, którego użyć i (dla lepszego lub gorszego) wybrałem '*. *'. Obie są złe wieści. (I najgorszy kataklizm 'rm' jaki widziałem, polegał na usunięciu konta dla tymczasowego użytkownika utworzonego z katalogu root'/'jako katalogu domowego, a polecenie" usuń użytkownika "usunęło wszystko z katalogu domowego. system może działać po utracie ważnych plików, ale na szczęście był to zupełnie nowy system i była kopia zapasowa z poprzedniego dnia.) –
Dzięki za twój wkład. Mogę wygenerować nazwy plików bez żadnego problemu. Moją jedyną obawą było szybsze wydawanie komendy "usuń". – Kitcha
Możesz użyć system
, aby utworzyć powłokę, która wykona dla ciebie * rozszerzenie. Prawdopodobnie nie uruchomiłoby się to jednak szybciej niż wywołanie funkcji unlink() w pętli, ponieważ musiałoby ono zarodkować powłokę (rozpocząć nowy proces). Ale łatwiej byłoby kodować.
- 1. Usuwanie plików z FTP w C#
- 2. Rekursywne usuwanie plików i katalogów w C#
- 3. Blokowanie i usuwanie plików
- 4. Usuwanie powielania kodu
- 5. Rekursywne usuwanie ukrytych plików
- 6. Usuwanie ogromnej ilości plików
- 7. Usuwanie kodu z wersji kompilacji .NET
- 8. Python Usuwanie niektórych rozszerzeń plików
- 9. Usuwanie znaków spoza ASCII z plików danych
- 10. Usuwanie spacji z nazw plików w folderze
- 11. Usuwanie plików podczas odczytu katalogu z readdir()
- 12. ansible - usuwanie niezarządzanych plików z katalogu?
- 13. Usuwanie niedrukowalnych znaków "gremlin" z plików tekstowych
- 14. C# Usuwanie listy z listy
- 15. Usuwanie liczb z tekstu przy użyciu C#
- 16. Usuwanie wiersza z datatable w C#
- 17. Usuwanie pustych (zero-bajtowych) plików
- 18. Usuwanie plików na serwerze zdalnym
- 19. Usuwanie wersji podstawowej plików xcdatamodel
- 20. Dekompilowanie plików kodu bajtowego OCaml
- 21. Usuwanie określonych plików przy użyciu Pythona
- 22. Automatyczne usuwanie plików/folderów w R
- 23. C++: Usuwanie efektu Moire z biblioteki OpenGL
- 24. Usuwanie plików starszych niż pewna liczba dni
- 25. Usuwanie wersji z TortoiseSVN
- 26. Usuwanie wielu plików za pomocą symbolu wieloznacznego
- 27. Wymuś wykluczenie plików z kodu PHPUnit
- 28. Rhino, dodawanie kodu z wielu plików javascript
- 29. Użyj biblioteki C z kodu C#
- 30. Usuwanie wskaźnika w C++
Dlaczego nie potrzaskujesz wyniku ls wewnątrz pętli, więc nie będziesz musiał wpisywać wszystkich nazw – lc2817
Problem polega na tym, że w tym katalogu jest 50000 plików. W razie potrzeby muszę usunąć tylko kilka z nich. "usuń" działa dobrze dla mnie, ale ukończenie go zajmuje trochę czasu. Szukam czegoś szybciej. Nie chcę wywoływać poleceń powłoki z "C", jeśli mogę zrobić to samo w "C". – Kitcha
Czy możesz użyć python? :) – lc2817