Pregunta

Tengo un programa bastante básico consola aquí, para determinar si existe una carpeta o archivo o no usando stat:

#include <iostream>
#include <sys/stat.h>

using namespace std;

int main() {
  char path[] = "myfolder/";
  struct stat status;

  if(stat(path,&status)==0) { cout << "Folder found." << endl; }
  else { cout << "Can't find folder." << endl; } //Doesn't exist

  cin.get();
  return 0;
}

También he probado la versión access:

#include <iostream>
#include <io.h>

using namespace std;

int main() {
  char path[] = "myfolder/";

  if(access(path,0)==0) { cout << "Folder found." << endl; }
  else { cout << "Can't find folder." << endl; } //Doesn't exist

  cin.get();
  return 0;
}

Ninguno de los dos a buscar a mi carpeta (que está justo en el mismo directorio que el programa). Estos trabajaron en mi último compilador (el defecto con devcpp). Cambié a CodeBlocks y estoy recopilando con Gnu GCC ahora, si eso ayuda. Estoy seguro de que es una solución rápida -? Alguien puede ayudar a cabo

(Obviamente estoy un novato en este así que si necesitas cualquier otra información He dejado de lado por favor, que me haga saber).

Actualizar

El problema estaba en el directorio base. El programa de trabajo actualizado es el siguiente:

#include <iostream>
#include <sys/stat.h>

using namespace std;

int main() {
  cout << "Current directory: " << system("cd") << endl;

  char path[] = "./bin/Release/myfolder";
  struct stat status;

  if(stat(path,&status)==0) { cout << "Directory found." << endl; }
  else { cout << "Can't find directory." << endl; } //Doesn't exist

  cin.get();
  return 0;
}

Otra actualización

Resulta que una barra diagonal inversa en el camino es un gran problema.

¿Fue útil?

Solución

Justo antes de su llamada stat, insertar el código:

system("pwd");  // for UNIXy systems
system("cd");   // for Windowsy systems

(o equivalente) para comprobar su directorio actual. Creo que usted encontrará que no es lo que piensa.

Como alternativa, ejecute el ejecutable desde la línea de comandos donde saber en qué directorio que se encuentre. IDE va ??con frecuencia ejecutar el ejecutable desde un directorio que no puede esperar.

O, utilice el nombre de ruta completo de manera que no importa en qué directorio que se encuentre.

Por lo que vale, el primer segmento de código funciona perfectamente (gcc bajo Ubuntu 10):

pax$ ls my*
ls: cannot access my*: No such file or directory

pax$ ./qq
Cannot find folder.

pax$ mkdir myfolder

pax$ ll -d my*
drwxr-xr-x 2 pax pax 4096 2010-12-14 09:33 myfolder/

pax$ ./qq
Folder found.

Otros consejos

¿Está seguro de que el directorio actual de su programa en ejecución es lo que se espera que sea? Intente cambiar path a una ruta absoluta para ver si eso ayuda.

Compruebe su PWD cuando se ejecuta el programa. Este problema no es causado por el compilador. Usted devcpp puede establecer un directorio de trabajo para su programa de forma automática.

Se puede averiguar por qué no stat() (que es una función de C, C ++ no, por cierto), por errno comprobación:

#include <cerrno>

...

if (stat(path,&status) != 0)
{
    std::cout << "stat() failed:" << std::strerror(errno) << endl;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top