Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Zodiak98 en 31 Agosto 2013, 02:19 am



Título: [Pregunta] ¿Cómo crear una carpeta desde C++?
Publicado por: Zodiak98 en 31 Agosto 2013, 02:19 am
Hola bueno es qué estaba leyendo sobre "Manejo de Archivos en C++" y pues ya lo domino regularmente pero... quisiera saber cómo crear una carpeta con un fichero adentro, o sea crear la carpeta directamente desde C++, que la cree en caso de que no exista.


Título: Re: [Pregunta] ¿Cómo crear una carpeta desde C++?
Publicado por: Stakewinner00 en 31 Agosto 2013, 02:24 am
Código
  1.   #include <direct.h>
  2.    int main()
  3.    {
  4.          mkdir("c:/msssssssslder");
  5.          return 0;
  6.    }

Fuente: http://www.cplusplus.com/forum/windows/85516/ (http://www.cplusplus.com/forum/windows/85516/)


Título: Re: [Pregunta] ¿Cómo crear una carpeta desde C++?
Publicado por: Zodiak98 en 31 Agosto 2013, 03:50 am
Código
  1.   #include <direct.h>
  2.    int main()
  3.    {
  4.          mkdir("c:/msssssssslder");
  5.          return 0;
  6.    }

Fuente: http://www.cplusplus.com/forum/windows/85516/ (http://www.cplusplus.com/forum/windows/85516/)

Heheh Gracias! :) Ahora otra pregunta, si yo quisiera crear dentro de esa misma carpeta un fichero o una carpeta anidada a esa, cómo seria?
Intente esto:
Código
  1.   #include <direct.h>
  2. int main()
  3. {
  4.          mkdir("xd\xd1.txt");
  5.          return 0;
  6. }

Luego lo hice en el disco local C para especificar una rota completa y corta de esta manera:

Código
  1.   #include <direct.h>
  2. int main()
  3. {
  4.          mkdir("C:\xd\xd1.txt");
  5.          return 0;
  6. }

Pero pues no funciona...


Título: Re: [Pregunta] ¿Cómo crear una carpeta desde C++?
Publicado por: ecfisa en 31 Agosto 2013, 05:08 am
Hola.

El archivo lo podes crear con la función open, un ejemplo:

Código
  1. ...
  2. #include <fcntl.h>
  3.  
  4. ...
  5. {
  6.  int handle;
  7.  
  8.  if ((handle=open("C:\\CARPETA\\PRUEBA.TXT", O_CREAT | O_TEXT)) != -1)
  9.   close(handle);
  10.  else
  11.   perror("Error:");
  12.  ...
  13. }
  14.  

Si usas Linux tendras que cambiar los delimitadores de ruta.

Saludos :)


Título: Re: [Pregunta] ¿Cómo crear una carpeta desde C++?
Publicado por: do-while en 31 Agosto 2013, 09:41 am
¡Buenas!

Para crear directorios anidados, si las funciones de direct.h funcionan igual que aquellas que utilizaba borland 5.x (dir.h si mal no recuerdo), tienes que partir del directorio base e ir creando los subdirectorios anidados uno por uno:

Código:
mkdir(base);
mkdir(base/subdir1);
mkdir(base/subdir1/subdir11);
mkdir(base/subdir1/subdir12);
mkdir(base/subdir2);
...

Por cierto, direct.h no es estandar. Se que gcc y derivados la incluyen. ¿El resto de compiladores también tienen esa librería? (supongo que clang también la incluira...)

Por  lo que acabo de ver entre los headers que trae MinGW están tanto dir.h como direct.h y ambas incluyen el header io.h. Es en este ultimo header donde encontrarás las funciones que te hacen falta para moverte por los directorios.

¡Saludos!


Título: Re: [Pregunta] ¿Cómo crear una carpeta desde C++?
Publicado por: Stakewinner00 en 31 Agosto 2013, 11:45 am
gracias por la aclaración do-while.

Hola.

El archivo lo podes crear con la función open, un ejemplo:

Código
  1. ...
  2. #include <fcntl.h>
  3.  
  4. ...
  5. {
  6.  int handle;
  7.  
  8.  if ((handle=open("C:\\CARPETA\\PRUEBA.TXT", O_CREAT | O_TEXT)) != -1)
  9.   close(handle);
  10.  else
  11.   perror("Error:");
  12.  ...
  13. }
  14.  
Si usas Linux tendras que cambiar los delimitadores de ruta.

En vez de eso puedes usar

Código
  1. #include <fstream>
  2.  
  3. int main()
  4. {
  5. std::ofstream o;
  6. o.open("archivo.txt");
  7. o << "ALGUNACOSA";
  8. o.close();
  9. }


Título: Re: [Pregunta] ¿Cómo crear una carpeta desde C++?
Publicado por: ecfisa en 31 Agosto 2013, 18:09 pm
Hola Stakewinner00 .

Y tenes toda la razón. ( no sé qué idea se me cruzó que estaba hacíendolo en C ).

En C++ también podría hacer:
Código
  1. #include <fstream>
  2.  
  3. int main()
  4. {
  5.  std::fstream output("archivo.txt", std::fstream::out);
  6.  //...
  7.  output.close();
  8. }
  9.  
  10. Saludos :)