Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
|
|
CI-1201 Programación II
Reacomodo de la clase readDirPortable
/// Ejemplo de uso de \c readDirPortable.
void ejemplo() {
using namespace std;
readDirPortable hFile("../");
hFile.setMask( "../*.*" ); // listado del directorio padre
while ( hFile.hasNext() ) {
cout << ' ' << setw(00) << hFile.getName() << endl;
// ...
hFile.next(); // siguiente archivo
}
}
|
Figura 1: Uso del iterador readDirPortable
El problema de la clase readDirPortable
es que no se
comporta como los
iteradores Java, pues la
invocación al método
next()
debe
aparecer al final del ciclo, como se muestra en la
Figura 1.
/// Ejemplo de uso de \c readDir.
void ejemplo() {
using namespace std;
readDir hFile("../");
hFile.setMask( "../*.*" ); // listado del directorio padre
while ( hFile.hasNext() ) {
readDir& current = hFile.next(); // siguiente archivo
// ...
cout << ' ' << setw(00) << current.getName() << endl;
}
}
|
Figura 2: Uso del iterador readDir
En la Figura 2 se muestra que para la
nueva clase readDir
es necesario invocar el
método
next()
al principio de cada nueva iteración,
lo que contraste con la invocación al final del ciclo que
requiere la clase readDirPortable
.
Implemente la
nueva clase readDir
.
- Consulta:
-
Profe: ¿Solo hay que cambiar de lugar el
hFile
?
Para eso no hace falta modificar
readDirPortable
.
- Respuesta:
-
El ejemplo que está incluido en el el archivo
readDirPortable.cpp
saca la lista de archivos y
carpetas de [ ..
] que es la carpeta padre:
#if 1 // programa de ejemplo
// ...
void ejemplo() {{ // test::ejemplo()
using namespace std;
readDirPortable hFile("../");
hFile.setMask( "../*.*" ); // listado del directorio padre
while ( hFile.hasNext() ) {
// ...
cout << ' ' << setw(00) << hFile.getName() << endl;
hFile.next(); // siguiente nombre de archivo
}
}}
Para obtener el listado de la carpeta actual hay que modificar el
ejemplo usando una máscara de archivos diferente:
hFile.setMask( "./*.*"
); // listado del directorio actual
Una vez que ya readDir
funciona, el ejemplo
quedaría así:
#if 1 // programa de ejemplo
// ...
void ejemplo() {{ // test::ejemplo()
using namespace std;
readDirPortable hFile("../");
hFile.setMask( "../*.*" ); // listado del directorio padre
while ( hFile.hasNext() ) {
hFile.next(); // [DE PRIMERO] siguiente nombre de archivo
// ...
cout << ' ' << setw(00) << hFile.getName() << endl;
}
}}
Si al usar readDir
se pone la orden de avance
hFile.next()
al final del ciclo, el resultado es una
falla (error) en la primera iteración, pues el valor de
hFile
no sería el correcto porque
todavía no ha quedado sido inicializado por
next()
.
Entregue su tarea por
correo electrónico, como
lo hizo anteriormente.
Entrega de Tareas
Tiempo de entrega: |
7 días |
|
Modalidad: |
En parejas |
Soluciones
Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2010
Derechos de autor reservados © 2010