Tengo que eliminar algunos cientos de archivos dentro de mi código C. Yo uso "eliminar" en un bucle. ¿Hay alguna forma más rápida de hacerlo que usar "eliminar"? Pregunto esto porque no puedo dar comodines usando "eliminar".eliminando archivos del código C
Respuesta
No, no hay una manera más rápida que usar remove()
- o unlink()
en sistemas POSIX - en un bucle.
El comando del sistema rm
también lo hace, al menos en el caso simple, no recursivo, donde los nombres se dan en la línea de comando. El intérprete de comandos expande los metacaracteres, y rm
(en) va muy bien eliminando lo que se le dijo que borre, sin darse cuenta de la desastrosa notación *.*
que se usó en la línea de comando. (En el caso recursivo, que utiliza una función como nftw()
para atravesar la estructura de directorios de llamadas de profundidad-primer orden y repetidas a unlink()
para eliminar los archivos y rmdir()
para eliminar los directorios (ahora vacíos).)
POSIX proporciona funciones (glob()
y wordexp()
) para generar listas de nombres de archivos de metacaracteres tal como se utilizan en el shell (POSIX), más fnmatch()
para ver si un nombre coincide con un patrón.
¿No es '*' lo mismo que '*. *', O hay alguna diferencia sutil? Cuando las personas mencionan un apocalipsis 'rm', siempre parecen usar' *. * ' –
En Windows' *. * 'Era necesario; en Unix, '*' es suficiente (en realidad, más devastador que '*. *' ya que el simple '*' coincide con más nombres). Discutí marginalmente cuál usar y (para bien o para mal) elegí '*. *'. Ambas son malas noticias. (Y el peor cataclismo 'rm' que he visto fue eliminar la cuenta de un usuario temporal creado con la raíz'/'como su directorio principal; el comando 'eliminar usuario' eliminó todo lo que estaba debajo de su directorio personal. Es sorprendente cuánto tiempo el sistema puede ejecutarse después de perder archivos cruciales. Afortunadamente, era un sistema completamente nuevo y hubo una copia de seguridad del día anterior.) –
Gracias por su contribución. Puedo generar los nombres de archivo sin ningún problema. Mi única preocupación era emitir el comando "Eliminar" más rápido. – Kitcha
Puede usar system
para generar un caparazón que haría la * expansión por usted. Sin embargo, esto probablemente no se ejecutará más rápido que simplemente llamar a unlink() en un bucle, ya que tendría que generar un shell (iniciar un nuevo proceso). Pero sería más fácil codificar.
- 1. Eliminando CSS no utilizados del código del sitio web
- 2. Eliminando línea del gráfico
- 3. Eliminando código duplicado en python
- 4. Eliminando archivos temporales de ASP.Net
- 5. Python Eliminando ciertas extensiones de archivos
- 6. Eliminando parte del contenido src del iframe
- 7. ¿Cómo puedo crear archivos .chm a partir del código C#?
- 8. Eliminando la duplicación de código en un solo archivo
- 9. git merge: Eliminando archivos que quiero mantener!
- 10. Eliminando solo mis archivos en Unix
- 11. eliminando puntos del historial del navegador
- 12. Eliminando instrucciones del bytecode de Java
- 13. Eliminando información privada del antiguo Git commits
- 14. Eliminando la versión del archivo xml
- 15. Llamar código python (archivos .py) desde C#
- 16. Comentando código C, encabezado y archivos fuente
- 17. C# Tamaño del código y tiempo de ejecución del código
- 18. Obfuscación del código Objective-C
- 19. Eliminando elementos en el código generado de Codedom
- 20. Eliminando una carpeta del repositorio svn
- 21. Eliminando jquery imgareaselect plugin del elemento
- 22. eliminando duplicados de una lista C#
- 23. Eliminando objetos HtmlElement programáticamente usando C#
- 24. Eliminando archivos que comienzan con un nombre Python
- 25. Eliminando una revisión de TortoiseSVN
- 26. eliminando carpeta de java
- 27. Eliminando la etiqueta del eje x del dendrograma en r
- 28. Powershell está eliminando la coma del argumento del programa
- 29. Eliminando caracteres no ASCII de archivos de datos
- 30. git commit eliminando todos los archivos en el repos
¿Por qué no canaliza el resultado de un ls dentro del bucle para que no tenga que escribir todos los nombres? – lc2817
El problema es que hay 50000 archivos en ese directorio. Debo eliminar solo algunos de ellos cuando sea necesario. "eliminar" funciona bien para mí, pero lleva un tiempo terminarlo. Estoy buscando algo más rápido. No quiero invocar comandos de shell desde "C" si puedo hacer lo mismo en "C". – Kitcha
¿Podría usar Python? :) – lc2817