Crea un directorio si no existe

En mi aplicación, quiero copiar un archivo al otro disco duro, así que este es mi código:

#include  using namespace std; int main(int argc, char* argv[] ) { string Input = "C:\\Emploi NAm.docx"; string CopiedFile = "Emploi NAm.docx"; string OutputFolder = "D:\\test"; CopyFile(Input.c_str(), string(OutputFolder+CopiedFile).c_str(), TRUE); return 0; } 

así que después de ejecutar esto, me muestra en el D: HDD un archivo testEmploi NAm.docx pero quiero que cree la carpeta de prueba si no existe.

Quiero hacer eso sin usar la biblioteca de Boost.

Use la función WINAPI CreateDirectory() para crear una carpeta.

Puede usar esta función sin verificar si el directorio ya existe, ya que fallará, pero GetLastError() devolverá ERROR_ALREADY_EXISTS :

 if (CreateDirectory(OutputFolder.c_str(), NULL) || ERROR_ALREADY_EXISTS == GetLastError()) { // CopyFile(...) } else { // Failed to create directory. } 

El código para construir el archivo de destino es incorrecto:

 string(OutputFolder+CopiedFile).c_str() 

esto produciría "D:\testEmploi Nam.docx" : falta un separador de ruta entre el directorio y el nombre del archivo. Arreglo de ejemplo:

 string(OutputFolder+"\\"+CopiedFile).c_str() 

Probablemente la forma más fácil y eficiente es usar boost y las funciones boost :: filesystem. De esta forma, puedes construir un directorio de forma sencilla y asegurarte de que sea independiente de la plataforma.

 const char* path = _filePath.c_str(); boost::filesystem::path dir(path); if(boost::filesystem::create_directory(dir)) { std::cerr<< "Directory Created: "<<_filePath< 

boost :: filesystem :: create_directory - documentación

Aquí está la manera simple de crear una carpeta …….

 #include  #include  void CreateFolder(const char * path) { if(!CreateDirectory(path ,NULL)) { return; } } CreateFolder("C:\\folder_name\\") 

Este código anterior funciona bien para mí.

 #include  // or #include  namespace fs = std::experimental::filesystem; if (!fs::is_directory("src") || !fs::exists("src")) { // Check if src folder exists fs::create_directory("src"); // create src folder } 

_mkdir también hará el trabajo.

 _mkdir("D:\\test"); 

https://msdn.microsoft.com/en-us/library/2fkk4dzw.aspx

Use CreateDirectory (char *DirName, SECURITY_ATTRIBUTES Attribs);

Si la función tiene éxito, devuelve un valor distinto de cero, de lo contrario NULL .

Puedes usar cstdlib

Aunque- http://www.cplusplus.com/articles/j3wTURfi/

 #include  const int dir= system("mkdir -p foo"); if (dir< 0) { return; } 

también puedes verificar si el directorio ya existe usando

 #include