Visual C++ .NET - aplicacion sobre consola de un programa en c++

 
Vista:

aplicacion sobre consola de un programa en c++

Publicado por Juan (1 intervención) el 28/09/2006 21:05:03
Hola he desarrollado el sgte programa en C++

#include "stdafx.h"
#include <string>
#include <iostream>
#include <windows.h>
#include <conio.h>

int Filecounter(const std::string &refcstrRootDirectory,
const std::string &refcstrExtension)

{
int iCount = 0;
std::string strFilePath;
std::string strPattern;
std::string strExtension;
HANDLE hFile;
WIN32_FIND_DATA FileInformation;

strPattern = refcstrRootDirectory + "\\*.*";
hFile = ::FindFirstFile(strPattern.c_str(), &FileInformation);
if(hFile != INVALID_HANDLE_VALUE)
{
do
{
if(FileInformation.cFileName[0] != '.')
{
strFilePath.erase();
strFilePath = refcstrRootDirectory +
"\\" +
FileInformation.cFileName;

if(FileInformation.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
}
else
{
strExtension = FileInformation.cFileName;
strExtension = strExtension.substr(strExtension.rfind(".") + 1);

if((refcstrExtension == "*") ||
(strExtension == refcstrExtension))
{

++iCount;
}
}
}
} while(::FindNextFile(hFile, &FileInformation) == TRUE);

::FindClose(hFile);
}

return iCount;
}

int main (int argc,char *argv[])
{
int i;
i = Filecounter("c:/qcall","*");
if(argc == 2)
{ std::cout << "Number of files = " << i << std::endl;
return i; }
else
{std::cout << "Uso:FileCounter <nombre de la carpeta>" << std::endl;
std::cin.get();
return -1; }
_getch();
}

Mi programa ya devuelve el numero de archivos que tiene cierta carpeta,osea ya estan resueltos los puntos 1 y 2.mi consulta es por los puntos 3,4 y 5.Que tengo que hacer?..les agradezco su ayuda.

Puntos

1.-La aplicación deberá recibir un parámetro, que será la carpeta en la cual se quiere hacer el conteo de archivos. Un ejemplo de cómo llamar a la aplicación sería:

FileCounter C:\Qcall

2.-Esto le indica a la aplicación que debe contar la cantidad de archivos que hay en la carpeta C:\QCall

3.-Si no se reciben parámetros, se escribirá un mensaje en pantalla explicando el uso; el mensaje dirá:

Uso: FileCounter <nombre de la carpeta>

4.-Resultado a devolver
El main de la aplicación deberá devolver la cantidad de archivos que contiene la carpeta recibida como parámetro.

5.- en caso de que la aplicación haya sido llamada sin parámetros, el resultado devuelto será -1

LES ESTARE ETERNEMENTE AGRADECIDO
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Contador de archivos en carpeta

Publicado por Alejandro (265 intervenciones) el 29/01/2024 23:37:48
Juan, aquí está el código revisado para cumplir con los puntos 3, 4 y 5 de tu solicitud:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "stdafx.h"
#include <string>
#include <iostream>
#include <windows.h>
#include <conio.h>
 
int Filecounter(const std::string &refcstrRootDirectory, const std::string &refcstrExtension)
{
    int iCount = 0;
    std::string strFilePath;
    std::string strPattern;
    std::string strExtension;
    HANDLE hFile;
    WIN32_FIND_DATA FileInformation;
 
    strPattern = refcstrRootDirectory + "\\*.*";
    hFile = ::FindFirstFile(strPattern.c_str(), &FileInformation);
    if (hFile != INVALID_HANDLE_VALUE)
    {
        do
        {
            if (FileInformation.cFileName[0] != '.')
            {
                strFilePath.erase();
                strFilePath = refcstrRootDirectory + "\\" + FileInformation.cFileName;
 
                if (FileInformation.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                {
                }
                else
                {
                    strExtension = FileInformation.cFileName;
                    strExtension = strExtension.substr(strExtension.rfind(".") + 1);
 
                    if ((refcstrExtension == "*") || (strExtension == refcstrExtension))
                    {
                        ++iCount;
                    }
                }
            }
        } while (::FindNextFile(hFile, &FileInformation) == TRUE);
 
        ::FindClose(hFile);
    }
 
    return iCount;
}
 
int main(int argc, char *argv[])
{
    if (argc == 2)
    {
        int i = Filecounter(argv[1], "*");
        std::cout << "Number of files = " << i << std::endl;
        return i;
    }
    else
    {
        std::cout << "Uso: FileCounter <nombre de la carpeta>" << std::endl;
        std::cin.get();
        return -1;
    }
 
    _getch();
}

Cambios realizados:
- En la función `main`, se verificó si `argc` es igual a 2 antes de llamar a `Filecounter`. Si se cumple esta condición, significa que se proporcionó un parámetro y se procede con el conteo de archivos en esa carpeta.
- Se modificó la llamada a `Filecounter` en el caso de proporcionar un parámetro para utilizar `argv[1]` como la carpeta de la que se contarán los archivos.
- Si no se proporciona un parámetro, se imprime un mensaje de uso y se devuelve -1.
- Se eliminó la línea `_getch()` al final del programa ya que no es necesaria y podría causar que la consola se cierre antes de que puedas ver los resultados.

Espero que este código cumpla con tus requisitos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar