¿Cómo obtengo la cantidad total de archivos en un directorio utilizando la biblioteca estándar de C++? Se agradece cualquier ayuda.Recuento de archivos en un directorio usando C++
Respuesta
No puede. Lo más cerca que podrá obtener es usar algo como Boost.Filesystem
Después de lo cual es trivial: 'int count = std :: difference (directory_iterator (dir_path), directory_iterator());' – MSalters
@MSalters, no puedo encontrar ninguna referencia a 'std :: difference'. ¿Estás seguro de que no quisiste decir 'std :: distance'? Además, necesitarás un 'static_cast
Estoy intentando evitar el enlace a las bibliotecas de Boost y usar solo encabezados para los algoritmos. – harik
. Necesitará utilizar una API o marco nativo.
Si no excluye la biblioteca estándar C, básicamente siempre disponible, puede usar esa. Porque de todos modos está disponible en todas partes, a diferencia del boost, ¡es una opción muy útil!
Se da un ejemplo here.
Y aquí:
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main (void)
{
DIR *dp;
int i;
struct dirent *ep;
dp = opendir ("./");
if (dp != NULL)
{
while (ep = readdir (dp))
i++;
(void) closedir (dp);
}
else
perror ("Couldn't open the directory");
printf("There's %d files in the current directory.\n", i);
return 0;
}
Y, por supuesto
> $ ls -a | wc -l
138
> $ ./count
There's 138 files in the current directory.
Esto no es C++ en absoluto, sino que está disponible en la mayoría, si no todos, los sistemas operativos, y trabajarán en C++ independientemente
ACTUALIZACIÓN: Corregiré mi declaración anterior acerca de que esto forma parte de la biblioteca estándar C - no lo es. Pero puede llevar este concepto a otros sistemas operativos, ya que todos tienen su forma de manejar los archivos sin tener que recurrir a bibliotecas adicionales.
-1: la biblioteca estándar de C tampoco proporciona ninguna manera de enumerar un directorio. –
Eso es un voto estúpido. Por supuesto, puedes contar archivos usando la libra estándar C.Tome el ejemplo que incluí en mi publicación - en lugar de llamar "puts ..." dentro del tiempo usado para iterar sobre cada archivo, simplemente haga "i ++" y declare un "int i" en algún lugar de arriba. Por supuesto, no existe la función "directory_get_file_count", pero ese no es el punto. El punto es que PUEDES usarlo para obtener el resultado deseado, es decir, la cantidad de archivos en una carpeta. Diablos, déjame editar mi respuesta original con una respuesta alimentada con cuchara, sec – LukeN
-1, 'readdir' es POSIX no estándar C. – MSalters
Si están bien nombrados, ordenados y tienen la misma extensión, simplemente puede contarlos con la biblioteca estándar de C++.
asumir los nombres de los archivos son como "img_0.jpg..img_10000.jpg..img_n.jpg", Sólo comprobar si están en la carpeta o no.
int Trainer::fileCounter(string dir, string prefix, string extension)
{
int returnedCount = 0;
int possibleMax = 5000000; //some number you can expect.
for (int istarter = 0; istarter < possibleMax; istarter++){
string fileName = "";
fileName.append(dir);
fileName.append(prefix);
fileName.append(to_string(istarter));
fileName.append(extension);
bool status = FileExistenceCheck(fileName);
returnedCount = istarter;
if (!status)
break;
}
return returnedCount;
}
bool Trainer::FileExistenceCheck(const std::string& name) {
struct stat buffer;
return (stat(name.c_str(), &buffer) == 0);
}
Una cuestión de edad, pero ya que aparece primero en la búsqueda de Google, pensé que añadir mi respuesta, ya que tenía una necesidad de algo así.
int findNumberOfFilesInDirectory(std::string& path)
{
int counter = 0;
WIN32_FIND_DATA ffd;
HANDLE hFind = INVALID_HANDLE_VALUE;
// Start iterating over the files in the path directory.
hFind = ::FindFirstFileA (path.c_str(), &ffd);
if (hFind != INVALID_HANDLE_VALUE)
{
do // Managed to locate and create an handle to that folder.
{
counter++;
} while (::FindNextFile(hFind, &ffd) == TRUE);
::FindClose(hFind);
} else {
printf("Failed to find path: %s", path.c_str());
}
return counter;
}
- 1. Obtener el recuento de archivos en un directorio
- 2. ¿Cómo comprime un directorio de archivos usando C++?
- 3. Procesadores de recuento usando C++ en Windows
- 4. Ejecutando archivos en un directorio de forma recursiva usando ruby
- 5. Extracción atributo de sólo lectura en un directorio usando C#
- 6. Muchos archivos en un directorio?
- 7. Usando Perl para renombrar archivos en un directorio
- 8. Iterar todos los archivos en un directorio usando BOOST_FOREACH
- 9. Buscar todos los archivos CSV en un directorio usando Python
- 10. Archivos en el directorio en C++
- 11. cómo hacer que los archivos cuenten en un directorio usando ruby
- 12. ¿Cómo obtengo un tamaño de directorio (archivos en el directorio) en C#?
- 13. Compruebe si un directorio está vacío usando C en Linux
- 14. Copia de archivos desde un directorio en un directorio existente
- 15. cómo obtener todos los archivos en un directorio en ipad usando el objetivo c
- 16. Directorio portátil/biblioteca de visualización de archivos en C/C++
- 17. ¿Cómo puedo saber cuántos archivos hay en un directorio?
- 18. Recuento de referencias en C++
- 19. Buscar archivos con patrones coincidentes en un directorio C#?
- 20. ¿Cómo copio archivos en otro directorio usando MSBuild?
- 21. Abrir un selector de directorio en C#
- 22. Abra el directorio usando C
- 23. Cómo copiar varios archivos desde un directorio diferente usando cp?
- 24. Incluyendo un directorio usando Pyinstaller
- 25. ¿Cómo atravesar los archivos en un directorio?
- 26. ¿Cómo creo un directorio en el servidor ftp usando C#?
- 27. Recuento de archivos de una carpeta
- 28. recuento usando Agrupar por LINQ
- 29. Recuento de palabras ordenadas usando Hadoop MapReduce
- 30. Mover archivos a un directorio
El funcionamiento del directorio está relacionado con el sistema operativo en el que se encuentra, desafortunadamente. Así que publique con qué SO está intentando, entonces tal vez podamos ayudarlo mejor. – Daniel
Código de plataforma cruzada para trabajar tanto en Windows como en Linux. Estoy usando mingw, gcc y msvc junto con la biblioteca wxWidgets, usando boost pero sin vincular a sus bibliotecas, solo incluyendo encabezados. fstat y _stat funciones que tenemos en #include. para obtener detalles del archivo. ¿Tenemos un soporte similar para obtener detalles del directorio? –
harik